今天我们这篇文章主要讲一下PHP二维数组排序中遇到最多的一种排序情况,就是根据某字段的值对二维数据进行排序,或者说根据某列的值对数组进行排序。
实际案例,例如我们有一个这样的数组,希望能得到一个直接使用二维数组中day字段排序后的结果,以下为原始数组的数据:
$arr = array( 0=>array( 'day'=>'2021-06-21', 'count'=>'5' ), 1=>array( 'day'=>'2021-05-10', 'count'=>'10' ), 2=>array( 'day'=>'2021-05-13', 'count'=>'12' ) );
我们希望最终得到下面这个排序后的结果:
$arr = array( 0=>array( 'day'=>'2021-05-10', 'count'=>'10' ), 1=>array( 'day'=>'2021-05-13', 'count'=>'12' ), 2=>array( 'day'=>'2021-06-21', 'count'=>'5' ) );
当然,得到相同结果的解决的办法不止一个,比如我们直接使用循环遍历也是可以得到这个相同的结果的。
但是我觉得循环遍历的效率有点低,而且代码量有点多,所以今天我们介绍一下另一种解决方案。
就是先使用array_column()函数得到目标排序字段的一维数组,然后再使用array_multisort()函数结合上面array_column()得到的结果对目标数组进行排序即可得到我们想要的结果。
$date = array_column($arr, 'day'); array_multisort($date, SORT_ASC, $arr); var_dump($arr);
不过在使用这种方式之前,我们最好先了解一下array_column()函数和array_multisort()函数这两个函数的作用。
最后总结一下,因为PHP二维数组排序的元素是按行排列的,我们本次的需求是按其中的一列进行排序。
PHP没有提供类似矩阵转置的函数,所以不能直接使用array_multisort()进行多维排序,只能先把排序的列抽取出来,再作为第一个参数传给array_multisort()函数即可。