zoukankan      html  css  js  c++  java
  • 多维数组排序

    一、二维数组排序

    1、方法1:

     /**
         * @Purpose       :    二维数组排序
         * @Method  Name  :    array_sort()
         * @Parameters    :    array  $array    要排序的二维数组
         *                     string $row      排序依据列
         *                     string $type     排序类型[asc or desc]
         * @Return array  :    $array_temp      排好序的数组
         */
        function array_sort($array,$row,$type){
            $array_temp = array();
            foreach($array as $v){
                $array_temp[$v[$row]] = $v;      // 以需要排序的字段名为 key
            }
            if($type == 'asc'){
                ksort($array_temp);
            }elseif($type='desc'){
                krsort($array_temp);
            }else{
            }
            return $array_temp;
        }

    注意:当需要排序的字段有重复的时候,这种办法就不适用啦,因为 key 值必须唯一。例如将

    $arr_test = [
    0 => ['name'=>'name1','age'=>23],
      1 => ['name'=>'name2','age'=>25],
      2 => ['name'=>'name2','age'=>23],
      3 => ['name'=>'name3','age'=>24]
    ];

    以 age 进行排序则不适用,排序后只会返回 3 个元素,因为有 2 个元素的 age 值是一样的。

    2、方法2:(推荐

    可以使用下面的方法来排序:

        /**
         *Purpose       :                 二维数组排序
         *@parameters   :   array  $arr   未处理的结果集
         *                  string $row   需要排序的行
         *@return       :  array  $arr   排序后的结果
         */
        function array_sort($arr,$row){
            $arr_tmp = array();     // age 所组成的数组
            foreach ($arr as $key => $value) {
                $arr_tmp[] = $value[$row];
            }
            //将 $arr_tmp 按 age 从小到大排序
            array_multisort($arr_tmp, SORT_ASC, $arr);     // 将 $arr 按 $arr_tmp 的值 ASC 排序
    return $arr; }

    array_multisort($arr1 , SORT_ASC, $arr2 , $arr3 ...) 其实就是将$arr1 排序后,后面的数组都按照 $arr1 的顺序就行排序。

    二、三维数组排序

    例如,需要对下面这个数组按照 sort字段升序进行排序。

    //待排序的数组
    $res = [
        13234567890 => [
           0 => [
               'id' => 1,
               'phone' => 13234567890,
               'answer' => '张三',
               'sort' => 1,
           ];
           1 => [
               'id' => 2,
               'phone' => 13234567890,
               'answer' => '男',
               'sort' => 3,
           ];
           2 => [
               'id' => 3,
               'phone' => 13234567890,
               'answer' => '25',
               'sort' => 2,
           ];
        ],
    ];
    
    //排序方法如下。
    foreach ($res as $key => $val) {
        $tmpArr = [];
        foreach ($val as $k => $v) {
            $tmpArr[] = $v['sort'];
        }
        array_multisort($tmpArr, SORT_ASC, $val);
        $resData[$key] = $val;
    }

    array_multisort()的用法可参看 :http://php.net/manual/zh/function.array-multisort.php

    本文为作者原创,如需要转载,请注明出处 :http://www.cnblogs.com/chrdai/p/7081704.html

  • 相关阅读:
    Python 安装Twisted 提示python version 2.7 required,which was not found in the registry
    Openfire Strophe开发中文乱码问题
    css div 垂直居中
    How to create custom methods for use in spring security expression language annotations
    How to check “hasRole” in Java Code with Spring Security?
    Android 显示/隐藏 应用图标
    Android 当媒体变更后,通知其他应用重新扫描
    文件上传那些事儿
    专题:点滴Javascript
    主流动画实现方式总结
  • 原文地址:https://www.cnblogs.com/chrdai/p/7081704.html
Copyright © 2011-2022 走看看