我期望能够对多个列上的多维数组进行排序。为了进一步复杂化,我希望能够为每个键/列设置特定的排序选项。我有什么是类似于数据库查询的结果,但实际上并不是一个来源,因此需要使用PHP而不是SQL进行排序。使用指定的排序选项在多个“列”(键)上排列多个多元数组的阵列
Array
(
[0] => Array
(
[first_name] => Homer
[last_name] => Simpson
[city] => Springfield
[state] => Unknown
[zip] => 66735
)
[1] => Array
(
[first_name] => Patty
[last_name] => Bouvier
[city] => Scottsdale
[state] => Arizona
[zip] => 85250
)
[2] => Array
(
[first_name] => Moe
[last_name] => Szyslak
[city] => Scottsdale
[state] => Arizona
[zip] => 85255
)
[3] => Array
(
[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);
,在一个
Warning: Parameter 2 to array_multisort() expected to be a reference, value given in...
我同意没有一个“正确”的答案,但补充一点,这与我的需求非常接近,除了例外,我需要对索引数组进行排序,而不是关联数组。 – 2014-05-07 11:02:33