PHP多维数组排序Array_multisort用法详解
程序员文章站
2024-03-15 12:36:47
...
PHP 的数组方法非常丰富,丰富到用不过来。今天分享下 array_multisort 这个多维数组排序利器,很久之前就知道这个方法,但是苦于解释比较晦涩,一直没懂怎么用,现在终于搞明白了,打算用最通俗易懂的语言分享下~
$aStudents = [
['name' => 'zhangsan', 'score' => 80],
['name' => 'lisi', 'score' => 70],
['name' => 'wangwu', 'score' => 90],
];
$aWanted = [ // 想得到按分数排序的结果
['name' => 'lisi', 'score' => 70],
['name' => 'zhangsan', 'score' => 80],
['name' => 'wangwu', 'score' => 90],
];
这应该是我们经常会用到的一种情况,如果不了解 array_multisort 的话,可以用笨办法,如各种排序来进行排序。
下面举两个例子来说明 array_multisort 的基本用法:
例子1:给二维数组排序
$aStudents = [
['name' => 'zhangsan', 'score' => 80],
['name' => 'lisi', 'score' => 70],
['name' => 'wangwu', 'score' => 90],
];
$aScores = array_column($aStudents, 'score');
array_multisort($aScores, $aStudents); // 得到按 score 排序结果
核心思路是这样的:
1.我们想要按每个学生数组/对象的 score 排序【按 score 这个灵魂排序,灵魂要与身体一一对应,所以前后数组元素数要一致】
2.那就把 score 的数据用 array_column 单独提取出来【把 score 这个灵魂取出来】
3.让 $aStudents 跟着 灵魂 $aScores 一起动,array_multisort($aScore, $aStudents)【分数怎么动,原来的对象就怎么动】
例子2
$aScore = [80, 70, 90];
$aNames = ['zhangsan', 'lisi', 'wangwu'];
array_multisort($aScore, $aNames);
1.相当于建立了 80=>zhangsan,70=>lisi,90=>wangwu 这样的灵魂链接,前边的分数被排序,后边的名字跟着动就好了(结果中names可能是无序的,因为只是对第一个数组排序,后边跟着调整顺序而已)
虽然这个方法很基础,但现在终于搞明白了也是很欣慰的 ????如果有疑问欢迎留言交流~
上一篇: php对多维数组进行排序
下一篇: 剑指offer 构建乘积数组