我希望能够对多个列上的关联数组进行排序。更复杂的是,我希望能够为每个键/列设置特定的排序选项。我有一组类似于 db 查询结果集的数据,但它实际上并不是来自一个,所以我需要在 PHP 而不是 SQL 中对其进行排序。
[
['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'],
];
我希望能够对其进行排序,类似于使用数据库查询可以完成的操作。哦,有时需要按数字指定列/键。
我想到的是与此类似的东西:
$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);
问题是我不想在那里“硬编码”那些键名。我尝试根据示例 #3从最终使用的文档中对数据库结果进行排序创建一个解决方案,但我似乎无法找到一种方法来使用我的动态构建的参数列表。array_multisort()
array_multisort()
array_multisort()
我的尝试是将这些参数“链接”到一个数组中,然后
call_user_func_array( 'array_multisort', $functionArgs);
这导致
警告:array_multisort() 的参数 2 应为参考,值在...