PHP二维数组排序,array_multisort,usort的用法

2018-04-08 09:41 php实例 79 梁俊威

在日常需要对数组进行操作的时候,我们通常会对一位数组使用asort、ksort等方法,那么二维数组呢?他们怎么实现的?使用array_multisort和usort可以实现。

例如像下面的数组:

$student = [
    ['id'=>1, 'name'=>'张三', 'sex'=>'男', 'number'=>10],
    ['id'=>3, 'name'=>'李四', 'sex'=>'女', 'number'=>1],
    ['id'=>7, 'name'=>'王五', 'sex'=>'男', 'number'=>5]
];

我们希望可以让number从小到大(从大到小)进行排序。博主整理了两个方法出来,分享给大家。


1、使用array_multisort

这个方法相对来说会麻烦一些,需要提前将number提取出来,放到另一个一位数组里,然后按照number升序(或降序)排列。具体代码如下:

$number = [];
foreach($student as $stu){
    $number[] = $stu['number']; // 需要先将数值提出。
}
array_multisort($number, SORT_ASC, $student);//得到的$student就是排序后的数组。

其中的SORT_ASC可以修改成SORT_DESC使其进行倒序重排数组。


2、使用usort

使用这个方法最大的好处就是可以自定义一些比较复杂的排序方法。例如按照名称的长度降序排列:

usort($student, function($a, $b) {
    $al = strlen($a['name']);
    $bl = strlen($b['name']);
    if ($al == $bl) return 0;
    return ($al > $bl) ? -1 : 1;
});

这里使用了匿名函数,如果有需要也可以单独提取出来。其中$a, $b可以理解为$users数组下的元素,可以直接索引name值,并计算长度,而后比较长度就可以了。

你更喜欢哪一种呢?

若无特殊说明,本站点所有内容均为原创,转载请说明出处!

原文链接:https://www.codelearn.cn/read/15.html 点击复制