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

  • 相关阅读:
    A New Approach to Line Simplification Based on Image Processing: A Case Study of Water Area Boundaries
    3D模型
    数码相机控制点的自动定位检校
    道路网匹配
    多线程操作数据拷贝要加线程锁
    编程琐事
    C++ 指定路径文件夹存在与否查询及文件夹创建
    C++ 网络编程之正确使用UDP广播及多播
    C++ 获得系统时间
    C++ 数据写入文件与读回
  • 原文地址:https://www.cnblogs.com/chrdai/p/7081704.html
Copyright © 2011-2022 走看看