二维数组排序

Posted Chrdai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二维数组排序相关的知识,希望对你有一定的参考价值。

一、二维数组排序

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

 

以上是关于二维数组排序的主要内容,如果未能解决你的问题,请参考以下文章

二维数组快速排序(sort+qsort)

C 语言二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )

快速排序算法实现(二维数组)

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否函数该整数。 ```java publi(代码

C 语言二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )

php 根据某个字段对二维数组这个数组排序