在日常需要对数组进行操作的时候,我们通常会对一位数组使用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值,并计算长度,而后比较长度就可以了。
你更喜欢哪一种呢?