array_multisort — 複数の配列または多次元配列を並べ替えます
説明
bool array_multisort ( array ar1 [,mixed arg [,mixed ... [, array ...]]] )
array_multisort
(PHP 4、PHP 5)
成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
array_multisort() を使用すると、複数の配列を一度に並べ替えたり、1 つ以上の次元に従って多次元配列を並べ替えたりできます。
連想 (文字列) キー名は変更されませんが、数値キー名は再インデックスされます。
入力配列はテーブルの列として扱われ、行ごとに並べ替えられます。これは SQL の ORDER BY 句の機能と似ています。最初の配列は、ソートされるメインの配列です。配列内の行 (値) が同じであると比較された場合、次の入力配列内の対応する値のサイズに従って並べ替えられます。
この関数のパラメータ構造はやや特殊ですが、非常に柔軟です。最初のパラメータは配列である必要があります。次の各引数には、以下にリストされている配列または並べ替えフラグを指定できます。
ソート順序フラグ:
SORT_ASC - 昇順でソート
SORT_DESC - 降順でソート
ソートタイプフラグ:
SORT_REGULAR - 通常の方法で項目を比較
SORT_NUMERIC - 数値に基づいて項目を比較
SORT_STRING - 文字列に基づいて項目を比較
各配列の後に 2 つの同様の並べ替えフラグを指定することはできません。各配列の後に指定された並べ替えフラグは、その配列に対してのみ有効です。それ以前は、デフォルト値 SORT_ASC および SORT_REGULAR が使用されていました。
例 1. 複数の配列を並べ替える
$ar1 = array(“10″, 100, 100, “a”); (1, 3, “2″, 1);
array_multisort($ar1, $ar2);
var_dump($ar2); ;
この例で並べ替えると、最初の配列には「10」、「a」、100、100 が含まれます。 2 番目の配列には 1,1,"2",3 が含まれます。 2 番目の配列内の項目の順序は、最初の配列内の対応する項目 (100 と 100) の順序とまったく同じです。
配列(4) {
[0]=> 文字列(2) “10″
[1]=> 文字列(1) “a”
[2]= > int(100)
[3]=> int(100)
}
array(4) {
[0]=> int(1) => int(1)
[2]=> 文字列(1) "2''
[3]=> int(3)
例 2. 多次元配列のソート
$ar = array (array (“10″, 100, 100, “a”), array (1, 3, “ 2 '', 1));
array_multisort ($ar[0], SORT_ASC, SORT_STRING,
$ar[1], SORT_NUMERIC, SORT_DESC); >
この例で並べ替えると、最初の配列には 10、100、100、"a" (文字列の昇順) が含まれ、2 番目の配列には 1、3、"2"、1 (数値として) が含まれます。降順)。
例 3. 多次元配列のソート
$ar = array(
array(“10″, 11, 100, 100, “a” )、
array( 1, 2, “2”, 3, 1)
);
array_multisort($ar[0], SORT_ASC, SORT_STRING,
$ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);
?>
この例では、ソート後の最初の配列は "10", 100, 100, "a ” (昇順の文字列として扱われます)。 2 番目の配列には、1、3、「2」、2、1 (降順で数値として扱われます) が含まれます。
配列(2) {
[0]=> 配列(5) {
[0]=> 文字列(2) “10″
[1]=> int(100)
[2]=> int(100)
[3]=> int(11)
[4]=> 文字列(1) "a"
}
[1]=> 配列(5) {
[0]=> int(1)
[2]=> 文字列(1) “2″
[3]=> int(2)
[4]=> int(1)
}
}
例 4. データベース結果の並べ替え
この例では、データ配列の各セルがテーブル内の行を表します。これは、データベースに記録される典型的なデータのコレクションです。
例のデータは次のとおりです。
ボリューム版
——-+——–
67 2
86 1
85 6
98 2
86 6
67 7
データはすべて data という名前の配列に格納されます。これは通常、mysql_fetch_assoc() などのループを通じてデータベースから取得されます。
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'エディション' => 1);
$data[] = 配列('ボリューム' => 85, 'エディション' => 6); ('ボリューム' => 98, 'エディション' => 2);
$data[] = array('ボリューム' => 86, 'エディション' => 6); [] = array('volume' => 67, 'edition' => 7);
?>
この例では、ボリュームは降順にソートされ、エディションは昇順にソートされます。
これで行を含む配列ができましたが、array_multisort() には列を含む配列が必要なので、次のコードを使用して列を取得し、並べ替えます。
// 列のリストを取得します
foreach ($data as $key => $row) {
$volume[$key] = $row[ 「ボリューム」];
$edition[$key] = $row['edition'];
}
// データをボリュームに従って降順に、エディションに従って昇順に並べます
//最後のパラメータとして $data を指定し、共通キーで並べ替えます。
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>
データ コレクションが並べ替えられます。結果は次のようになります:
ボリューム版
——-+——–
98 2
86 1
86 6
85 6
67 2
67 7
例 5. 大文字と小文字を区別しない並べ替え
SORT_STRING と SORT_REGULAR は大文字と小文字が区別され、大文字は小文字よりも前に並べ替えられます。
大文字と小文字を区別しない並べ替えを実行するには、元の配列の小文字で並べ替えます。
$array = array('Alpha', 'atomic', 'Beta', 'bank');
$array_ lowercase = array_map('strto lower', $array) ;
array_multisort($array_ lowercase, SORT_ASC, SORT_STRING, $array);
print_r($array)
;
配列
(
[0] => アルファ
[1] => アトミック
[2] => バンク
[3] => ベータ
)
[翻訳者のメモ] この関数は非常に便利です。理解を助けるために、次の例を見てください。
例 6. ランキング
$grade = array(“score” => array(70, 95, 70.0, 60, “70″),
“name” => array( "張三", "Li Si", "Wang Wu",
"Zhao Liu", "Liu Qi"));
array_multisort($grade["score"], SORT_NUMERIC, SORT_DESC,
// スコアを次のように使用します数値、大きい順に並べ替えます
$grade["name"], SORT_STRING, SORT_ASC);
// 名前を文字列として使用し、小さい順に並べ替えます
var_dump($ Grade); >?>
上記の例は次のように出力します。
array(2) {
["score"]=> 0]=>
int(95)
[1]=>
string(2) "70"
[2]=>float(70 )
[3]=>int(70)
[4]=>
int(60)
}
array(5) ) {
[0]=>
文字列(5) 「李思」
[1]=>
文字列(6) 「劉斉」
[ 2]=> ;
string(7) "Wang Wu"
[3]=>
string(9) "Zhang San"
[4]=>string(8) "Zhao" Liu”
}
}
この例では、成績を含む配列 $grade がスコア (スコア) によって高いものから低いものに並べ替えられ、同じスコアを持つ人が名前 (名前) によって並べ替えられます。 ) を昇順に並べます。並べ替えの結果、Li Si が 95 ポイントで 1 位、Zhao Liu が 60 ポイントで 5 位にランクされました。 Zhang San、Wang Wu、Liu Qi はいずれも 70 ポイントを獲得し、ランキングは名前のアルファベット順に並べられ、Liu が 1 位、Wang が 2 位、Zhang が最後でした。区別するために、3 つの 70 ポイントはそれぞれ整数、浮動小数点数、文字列で表され、それらのソート結果はプログラム出力で明確に確認できます。
補足:
PHP 言語における多次元配列のソートの最も複雑なソート方法です。実際のコーディングでは PHP 関数 array_multisort() を使用して、この複雑な並べ替えを実装します。たとえば、ネストされた配列は、最初に共通キーを使用して並べ替えられ、次に別のキーに基づいて並べ替えられます。これは、SQL の ORDER BY ステートメントを使用して複数のフィールドを並べ替えることに非常に似ています。
PHP 関数 asort() は、値のソートという特定の方法を使用して分析します
PHP 関数 asort() の機能的特徴の詳細な説明
PHP 自然言語ソートの特徴の概要
PHP 自然言語逆順の具体的な実装方法
PHP 関数 usort() を使用してカスタム ソートを実装する方法
リスト J の例では、PHP 関数 array_multisort() がどのように機能するかを説明しています。1, " name" => "Boney M", "評価 " => 3), array("id" => 2, "name" => "Take That", "評価" => 1), array ("id" => 3, "name" => "ザ・キラーズ", "評価" => 4), array("id" => 4, "name" => "ルサイン", "評価" => 3), ); foreach ( $data as $key => $value) { $name[$key] = $value[名前]; $評価[$key] = $value[評価]; } array_multisort($rated, $name, $data) ; print_r($data);?> ここでは、$data 配列内の行と列の配列をシミュレートします。次に、PHP 関数 array_multisort() を使用して、最初に評価順に、次に評価が等しい場合は名前順にデータ セットを並べ替えました。出力は次のとおりです:
コードをコピー
コードは次のとおりです:
配列 ([0] => 配列
(
[id] => 2 [名前] => テイクザット [評価] => 1 ) [1] => 配列 (
[id] => 1[名前] => ボニー M
[評価] => 3
) [2] => 配列
(
[id] => 4
[名前] => ルサイン
[評価] => 3
)
[3 ] => 配列
(
[id] => >
PHP 関数 array_multisort() は、PHP で最も便利な関数の 1 つであり、非常に幅広い用途があります。さらに、例でわかるように、無関係な複数の配列を並べ替えたり、1 つの要素を次の並べ替えの基礎として使用したり、データベースの結果セットを並べ替えたりすることもできます。