複数の列で連想配列の配列をソートできるようにしたいと考えています。さらに複雑にするために、キー/列ごとに特定の並べ替えオプションを設定できるようにしたいと考えています。データベース クエリの結果セットに似た一連のデータがありますが、実際には 1 つのデータから得られたものではないため、SQL ではなく PHP で並べ替える必要があります。
[
['first_name' => 'Homer', 'last_name' => 'Simpson', 'city' => 'Springfield', 'state' => 'Unknown', 'zip' => '66735'],
['first_name' => 'Patty', 'last_name' => 'Bouvier', 'city' => 'Scottsdale', 'state' => 'Arizona', 'zip' => '85250'],
['first_name' => 'Moe', 'last_name' => 'Szyslak', 'city' => 'Scottsdale', 'state' => 'Arizona', 'zip' => '85255'],
['first_name' => 'Nick', 'last_name' => 'Riviera', 'city' => 'Scottsdale', 'state' => 'Arizona', 'zip' => '85255'],
];
DBクエリでできることと同じようにソートできるようにしたいと思います。ああ、時には列/キーを数値で指定する必要があります。
私が念頭に置いていたのは、これに似たものでした:
$sortOptions = array(
array( 'city', SORT_ASC, SORT_STRING),
array( 'zip', SORT_DESC, SORT_NUMERIC),
array( 2, SORT_ASC, SORT_STRING) // 2='last_name'
);
$sorter = new MultiSort($data, $sortOptions);
$sortedData = $sorter->getSortedArray();
print_r($jmsSorted);
私が終わらせたいのはこれです:
Array
(
[0] => Array
(
[first_name] => Nick
[last_name] => Riviera
[city] => Scottsdale
[state] => Arizona
[zip] => 85255
)
[1] => Array
(
[first_name] => Moe
[last_name] => Szyslak
[city] => Scottsdale
[state] => Arizona
[zip] => 85255
)
[2] => Array
(
[first_name] => Patty
[last_name] => Bouvier
[city] => Scottsdale
[state] => Arizona
[zip] => 85250
)
[3] => Array
(
[first_name] => Homer
[last_name] => Simpson
[city] => Springfield
[state] => Unknown
[zip] => 66735
)
)
更新:理想的には、ソリューションによって動的に作成されると思います
array_multisort( $city, SORT_ASC, SORT_STRING, $zip, SORT_DESC, SORT_NUMERIC, $last_name, SORT_ASC, SORT_STRING, $inputArray);
問題は、そこにそれらのキー名を「ハードコード」する必要がないことです。Example #3 Sorting database results from the array_multisort()
documentation that 最終的に使用したものに基づいてソリューションを作成しようとしましたarray_multisort()
が、動的に構築された引数リストを に使用する方法が見つからないようですarray_multisort()
。
私の試みは、これらの引数を配列に「チェーン」してから、
call_user_func_array( 'array_multisort', $functionArgs);
その結果、
警告: array_multisort() のパラメータ 2 は参照であると予想されます。値は次で指定されます...