この問題は、Mysql の order by に似ています。必要なのは、配列内のさまざまなフィールドの並べ替えをシミュレートすることです。
次の配列があるとします。
$beforeSort = [
"0" => ["名前" => 80、"数学" => 50
"1" => ["名前" => 50、"中国語" => 70
"2" => ["老王"、"英語" => 50、"数学" => 80
];
次に、配列内の chinese
の順序に従う必要があります。同じ場合は、math
の順序に従う必要があります。最終的な結果は次の配列になります。< /p>
$afterSort = [
"2" => ["老王"、"英語" => 50、"数学" => 80
"0" => ["名前" => 80、"数学" => 50
"1" => ["名前" => 50、"中国語" => 70
];
これを実現する別の方法はありますか?
これは私自身が使用するバージョンです:
リーリー リーリーリーリー
印刷結果:
リーリー配列をセットに変換して処理できます。 PHPコレクションを使用して実装されたsortメソッドは、さまざまな複雑なソートに特化しています
<?php
] リーリー//次に、配列内の中国語の順序に従う必要があります。同じであれば、最終的な結果は次の配列になります。
$beforeSort = [
];
$data_math = array_column($beforeSort,'math');
$data_chinese = array_column($beforeSort,'chinese');
array_multisort($data_chinese,SORT_ASC,$data_math,SORT_ASC,$beforeSort); );
リーリー
///上の階の人からの答えをお借りします
リーリー多次元配列をソートするには、array_multisortを実装できる公式関数があります
リーリー
$beforeSort = [
リーリー];
foreach ($beforeSort as $key => $value) {
リーリー}
array_multisort($chinese, SORT_ASC, $math, SORT_ASC, $beforeSort);
print_r($beforeSort);