【发布时间】:2010-10-23 00:37:20
【问题描述】:
我希望能够对多个列上的关联数组进行排序。更复杂的是,我希望能够为每个键/列设置特定的排序选项。我有一组类似于 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);
问题在于我不想在其中“硬编码”这些键名。我尝试根据array_multisort() 文档中的Example #3 Sorting database results 创建一个解决方案,该文档最终使用array_multisort(),但我似乎无法找到一种方法来为@ 使用我的动态构建的参数列表987654328@.
我的尝试是将这些参数“链接”到一个数组中,然后
call_user_func_array( 'array_multisort', $functionArgs);
这会导致
警告:array_multisort() 的参数 2 应为引用,值在...中给出。
【问题讨论】:
标签: php arrays sorting multidimensional-array