php array_multisort多维数组排序

sinmu phper 2021-12-14 16:17:56

最近遇到一个二维数组排序的问题。

假设有以下数组

$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>";
}

 

...全文
160 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-编程语言 发布问题, 以便更快地解决您的疑问

15

社区成员

发帖
与我相关
我的任务
社区描述
我可以对一件事情坚持下去吗
社区管理员
  • Python小叮当
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

佛系记录php的相关知识

试试用AI创作助手写篇文章吧