php根据二维数组中的某个字段进行排序

需求:有一个学生信息的二维数组,需要根据年龄从大到小排序,数组如下:


$arrUsers = array(
    array(
            'id'   => 1,
            'name' => '张三',
            'age'  => 25,
    ),
    array(
            'id'   => 2,
            'name' => '李四',
            'age'  => 23,
    ),
    array(
            'id'   => 3,
            'name' => '王五',
            'age'  => 40,
    ),
    array(
            'id'   => 4,
            'name' => '赵六',
            'age'  => 31,
    ),
    array(
            'id'   => 5,
            'name' => '黄七',
            'age'  => 20,
    ),
); 

 

解决方案:

一、


$sort = array(
        'direction' => 'SORT_DESC', //排序顺序标志 SORT_DESC 降序;SORT_ASC 升序
        'field'     => 'age',       //排序字段
);
$arrSort = array();
foreach($arrUsers AS $uniqid => $row){
    foreach($row AS $key=>$value){
        $arrSort[$key][$uniqid] = $value;
    }
}
if($sort['direction']){
    array_multisort($arrSort[$sort['field']], constant($sort['direction']), $arrUsers);
}

var_dump($arrUsers);
 

二、

$last_ages = array_column($arrUsers,'age');
array_multisort($last_ages ,SORT_DESC,$arrUsers);

var_dump($arrUsers);

 

关键方法:

array_multisort () 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序,并返回排序数组。​​​​​

​​此处用到了年龄age的一维数组对学生信息这个二维数组进行排序。

理解这个函数首先举个简单例子,

$ar1 = array(10, 100, 100, 0);
$ar2 = array(1, 3, 2, 4);
array_multisort($ar1, $ar2); //默认SORT_ASC

var_dump($ar1);
var_dump($ar2);

//打印结果
array(4) {
  [0]=> int(0)
  [1]=> int(10)
  [2]=> int(100)
  [3]=> int(100)
}
array(4) {
  [0]=> int(4)
  [1]=> int(1)
  [2]=> int(2)
  [3]=> int(3)
}

简单来说就是根据第一个数组的排序(SORT_ASC或SORT_DESC),返回键值对应的排序后的第二个数组。

如上图 $ar2[3] = 4 对应 $ar1[3] = 0 ,当正序排列时 $ar1[3] = 0 最小变为 $ar1[0] = 0 ,对应 $ar2[0] = 4 。

更多请查询手册,http://www.php.net/manual/zh/function.array-multisort.php

 

参考:

http://www.cnblogs.com/wenzheshen/p/9455554.html

https://blog.csdn.net/qq_38666502/article/details/81077104

 

每日吃超过十块的盖饭都会考虑好久

却心系宇宙从哪来到哪去的普普通程序员

2018.11.6

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值