15
社区成员




最近遇到一个二维数组排序的问题。
假设有以下数组
$arr = [
['a'=>'hello','b'=>1],
['a'=>'hello','b'=>2],
['a'=>'hello','b'=>3],
['a'=>'hello','b'=>6],
['a'=>'hello','b'=>345],
['a'=>'hello','b'=>45],
['a'=>'hello','b'=>768],
['a'=>'hello','b'=>234],
['a'=>'hello','b'=>23],
['a'=>'hello','b'=>55],
['a'=>'hello','b'=>134],
];
我第一反应是写两层for循环进行遍历,但是想了想,世界上最好的语言怎么可能这点功能都没有呢?就按照我的脑海里面的思路核实到了写回调这个情况。
但是查询文档发现它不适合,因为它就相当于一个数组的遍历,只是再遍历完每一个子项的时候会将这个子项传递到我们设置的函数里面,很显然,这样的话和我写两层for循环一样的道理,不划算。
进一步查询文档后发现了 array_multisort 这个方法,但是发现我看不懂,因为我不知道第一个参数是用来做什么的。传递怎么的数据比较合适。
实际上是说的太直白的了,我看不懂
继续往下看官方文档发现有个示例
我获得某个序列(数组),然后中间的 SORT_DESC 是一个排序的方式。
这里我理解为,将前面的这个序列按照升序或降序进行排列后。然后将我们的二维数组按照我们排序好的序列进行排序。
到了这里我们就是需要获取前面的序列数组了。获取方法如下
$col = array_column($arr,'b');
array_column 可以获取指定列的值
接下来只要拼接起来进行输出就可以了
// 降序
array_multisort($col,SORT_DESC,$arr);
// 输出
foreach($arr as $k=>$v){
print_r($v);
echo "<hr>";
}