重複の可能性:
PHPで多次元配列をソートするにはどうすればよいですか
.........
これは複製ではありません。多次元配列の並べ替えに関するスタックオーバーフローに関する質問は確かにたくさんあります (質問を投稿する前に、昨日それらのほとんどを読んだと思います...) が、私が見たもので、私の特定の問題:可変数による並べ替えに言及しているものはありません。フィールドの。以下の @dev-null-dweller によって与えられた答えはまさにこれを行います。
.........
PHP で多次元配列の柔軟な並べ替え関数を作成しようとしています。
私が求めている柔軟性は、並べ替えフィールドの数 (第 1、第 2、または第 3 レベルの並べ替えの場合は 1、2、または 3) と、それらのフィールドの識別です。
これは私の配列のサンプルビットです:
Array
(
[0] => Array
(
[title] => Australia Book
[price] => 209.00
[code] => 3571313
[con] => Australia & Oceania
[ctry] => Australia
)
[1] => Array
(
[title] => New Zealand Book
[price] => 169.00
[code] => 3571346
[con] => Australia & Oceania
[ctry] => New Zealand
)
[2] => Array
(
[title] => Austria Book
[price] => 129.00
[code] => 3571230
[con] => Europe
[ctry] => Austria
)
[3] => Array
(
[title] => Austria Pocket Book
[price] => 119.00
[code] => 3571354
[con] => Europe
[ctry] => Austria
)
[4] => Array
(
[title] => Amsterdam Book
[price] => 59.00
[code] => 3571350
[con] => Europe
[ctry] => Netherlands
)
[5] => Array
(
[title] => Britain
[price] => 59.00
[code] => 3571315
[con] => Europe
[ctry] => Britain
)
)
タイトルのみでソートする必要がある場合もあれば、ctry の次にタイトルでソートする場合もあれば、con でソートしてから ctry の次にタイトルでソートする場合もあります。
私は次のように2レベルのソートを行うことができました:
usort($arrCatalog, array('Catalogs_model', 'multi_compare'));
function multi_compare($a ,$b) {
if ($a['con'] < $b['con']) {
return -1;
} elseif ($a['con'] > $b['con']) {
return 1;
} else {
return strcmp($a['title'], $b['title']);
}
}
multi_compare
最初の質問は、内から呼び出されたときに関数にパラメーターを渡す方法usort
です。
multi_sort
それを解決した後、ID やフィールドの数が変化するように変更する方法について、いくつかの指針をいただければ幸いです。