欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 这个灵魂取出来】

PHP多维数组排序Array_multisort用法详解

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可能是无序的,因为只是对第一个数组排序,后边跟着调整顺序而已)

虽然这个方法很基础,但现在终于搞明白了也是很欣慰的 ????如果有疑问欢迎留言交流~