【PHP】多维数组多个字段排序

【PHP】多维数组多个字段排序

对于多维数组,如何针对多个字段进行排序。

例如:
    $array1 = array(
               0=>array('id'=>8,'name'=>'Apple','age'=> 18),
               1=>array('id'=>8,'name'=>'Bed','age'=>17),
               2=>array('id'=>5,'name'=>'Cos','age'=>16),
               3=>array('id'=>5,'name'=>'Cos','age'=>14)
   );
需要先对`id`进行排序,然后依据排序结果,再对`name`进行排序,最后再对`age`进行排序。

先构造函数:
    private function _sortArrByManyField()
    {
        $args = func_get_args();
        if(empty($args)){
            return null;
        }
        $arr = array_shift($args);
        foreach($args as $key => $value){
            if(is_string($value)){
                $temp = array();
                foreach($arr as $k=> $v){
                    $temp[$k] = $v[$value];
                }
                $args[$key] = $temp;
            }
        }
        //引用值
        $args[] = &$arr;
        call_user_func_array('array_multisort',$args);
        return array_pop($args);
    }
调用函数:
    $arr = sortArrByManyField($array1,'id',SORT_ASC,'name',SORT_ASC,'age',SORT_DESC);
最后结果:
    array(4) {
      [0]=>array(3) {
            ["id"]=>int(5)
            ["name"]=>string(3) "Cos"
            ["age"]=>int(16)
          }
      [1]=>array(3) {
            ["id"]=>int(5)
            ["name"]=>string(3) "Cos"
            ["age"]=>int(14)
          }
      [2]=>array(3) {
            ["id"]=>int(8)
            ["name"]=>string(5) "Apple"
            ["age"]=>int(18)
          }
      [3]=>array(3) {
            ["id"]=>int(8)
            ["name"]=>string(3) "Bed"
            ["age"]=>int(17)
      }
    }
解析:
`func_get_args()`返回一个数组,其中每个元素都是目前用户自定义函数的参数列表的相应元素的副本。

`call_user_func_array()`把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr索引数组)为回调函数的的参数传入。

`array_multisort()` 参数:bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] ),可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。 
关联(string)键名保持不变,但数字键名会被重新索引。
排序顺序标志:1.SORT_ASC - 按照上升顺序排序。 2.SORT_DESC - 按照下降顺序排序。
排序类型标志:1.SORT_REGULAR - 将项目按照通常方法比较。2.SORT_NUMERIC - 将项目按照数值比较。3.SORT_STRING - 将项目按照字符串比较。
输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。

`array_pop()`弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。如果 array 为空(或者不是数组)将返回 NULL。 此外如果被调用不是一个数则会产生一个 Warning。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值