PHP二维数组,根据多个字段来排序 array_multisort或自定义函数

实现amount最大和age最大顺序排序,原数据:

array(4) {
  [0] => array(2) {
    ["amount"] => int(50)
    ["age"] => int(4)
  }
  [1] => array(2) {
    ["amount"] => int(100)
    ["age"] => int(10)
  }
  [2] => array(2) {
    ["amount"] => int(200)
    ["age"] => int(20)
  }
  [3] => array(2) {
    ["amount"] => int(300)
    ["age"] => int(30)
  }
}

一、使用array_multisort实现二维数组,多字段排序

           array_multisort(
                            array_column($data, 'amount'),SORT_DESC,
                            array_column($data, 'age'),SORT_DESC,
                            $data
                   );

排序后

array(4) {
  [0]=>
  array(2) {
    ["amount"]=>
    int(300)
    ["age"]=>
    int(30)
  }
  [1]=>
  array(2) {
    ["amount"]=>
    int(200)
    ["age"]=>
    int(20)
  }
  [2]=>
  array(2) {
    ["amount"]=>
    int(100)
    ["age"]=>
    int(10)
  }
  [3]=>
  array(2) {
    ["amount"]=>
    int(50)
    ["age"]=>
    int(4)
  }
}

二、sortArrayByManyField自定义函数排序

   $data=[];//排序数组
   $list = sortArrayByManyField($data, 'amount', SORT_DESC, 'age', SORT_DESC);
 


    function sortArrayByManyField()
    {
        $args = func_get_args(); // 获取函数的参数的数组

        if (empty($args)) {
            return [];
        }
        $arr = array_shift($args);
        if (!is_array($arr)) {
            return [];
        }

        foreach ($args as $key => $field) {
            if (is_string($field)) {
                $temp = array();
                foreach ($arr as $index => $val) {
                    $temp[$index] = $val[$field];
                }
                $args[$key] = $temp;
            }
        }


        $args[] = &$arr;//引用值
        call_user_func_array('array_multisort', $args);
        return array_pop($args);
    }
sortArrayByManyField排序后:
array(4) {
  [0] => array(2) {
    ["amount"] => int(300)
    ["age"] => int(30)
  }
  [1] => array(2) {
    ["amount"] => int(200)
    ["age"] => int(20)
  }
  [2] => array(2) {
    ["amount"] => int(100)
    ["age"] => int(10)
  }
  [3] => array(2) {
    ["amount"] => int(50)
    ["age"] => int(4)
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PHP隔壁老王邻居

啦啦啦啦啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值