PHP 多次元配列のソート実装コード

WBOY
リリース: 2016-06-13 12:22:26
オリジナル
925 人が閲覧しました

array_multisort
(PHP 4, PHP 5)
array_multisort -- 複数の配列または多次元配列をソートします
説明
bool array_multisort ( array ar1 [,mixed arg [,mixed ... [,array .. .]]] )

成功した場合は 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");
$ar2 = array(1, 3, "2", 1);
var_dump($ar1);
var_dump($ar2);


この例では、最初の配列には「10」が含まれます。 「、100、100。 2 番目の配列には 1,1,"2",3 が含まれます。 2 番目の配列内の項目の順序は、最初の配列内の対応する項目 (100 と 100) の順序とまったく同じです。



コードをコピーします コードは次のとおりです。

array(4) {

[0]=> (2) "10"
[1]=> string(1) "a"
[2]=> int(100)
[3]=> int; >}
array(4) {
[0]=> int(1)
[2]=> string(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,
?>); >
this この例でソートすると、最初の配列には 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);

;
この例では、ソート後、最初の配列は「10」、100、100、11、「a」になります(昇順の文字列として扱われます)。 2 番目の配列には、1、3、「2」、2、1 (降順の数値として扱われます) が含まれます。



コードをコピー

コードは次のとおりです。



array(2) {

[0]=> (5) { [0]=> 文字列(2) "10" [1]=> int(100) [2]=> 3]= > int(11) [4]=> 文字列(1) "a"

}

[1]=> 配列(5) {
[0]= > int (1)
[1]=> int(3)
[2]=> string(1)
[3]=> >[4 ]=> int(1)
}
}


例 4. データベースの結果の並べ替え
この例では、データ配列の各セルがテーブルを表しますラインの。これは、データベースに記録される典型的なデータのコレクションです。
例のデータは次のとおりです:
ボリューム | エディション
---------- --------
67 |
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['volume']
$edition[$key] = $row['edition' ];
}
// データをボリュームに従って降順、エディションに従って昇順に並べ替えます
// $data を最後のパラメータとして使用し、共通キーで並べ替えます
array_multisort($ volume, SORT_DESC, $edition, SORT_ASC, $data);


データ収集がソートされ、結果は次のようになります。 >------ ---- ----
98 | 2

86 | 6
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); ($array ); ?>

上記の例は次のように出力します:
Array
(
[0] => Alpha
[1] = > atomic
[2] => バンク
[3] => ベータ
)


[翻訳者注] この関数は、理解を助けるために以下をお読みください。この例:
例 6. ランキング
$grade = array("score" => array(70, 95, 70.0, 60, "70"),
" name" => array("張三", "李斯", "王呉",
"趙劉", "劉琦"));
array_multisort($grade["score"] , SORT_NUMERIC, SORT_DESC,
// スコアを数値として使用し、高い順に並べ替えます。
$grade["name"], SORT_STRING, SORT_ASC); // 名前を小さい順から低い順に文字列として使用します。 Large sort
var_dump($grade);
?>
上記の例は次のように出力します。 5 ) {
[0]=>
int(95)
[1]=>
string(2) "70"
float (70)
[3]=>
int(70)
[4]=>
}
["name"]=> ;
array(5) {
[0]=>
string(5) "Li Si"
[1]=>string(6) "Liu Qi"
[2]=>
文字列(7) "王呉"
[3]=>
文字列(9) "張三"
[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.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート