PHP多维数组排序问题

多维数组排序,如果a相等,那么比较bb相等再比较c,排序完在生成个新字段sort 作为标识

$arr = [
    1 =>   [
        'a' => 1,
        'b' => 2,
        'c' => 4,
    ], 
    0 =>   [
        'a' => 1,
        'b' => 2,
        'c' => 3,
    ], 
    5 =>   [
        'a' => 3,
        'b' => 2,
        'c' => 3,
    ], 
    2 =>   [
        'a' => 2,
        'b' => 2,
        'c' => 3,
    ], 
    4 =>   [
        'a' => 4,
        'b' => 2,
        'c' => 3,
    ], 
];

阅读 2.6k
3 个回答

好吧 ,我是这样用的

<?php

$a = $b = $c = [];

array_map(function( $value ) use ( &$a,&$b,&$c ){
      array_push($a, $value['a']);
      array_push($b, $value['b']);
      array_push($c, $value['c']);
} , $arr);

$count = $arr;

var_dump($count);
array_multisort(
    $a,SORT_ASC,
    $b,SORT_ASC,
    $c,SORT_ASC,
    $arr
);

var_dump($arr);

多维数组的排序和一维数组排序一样,只要注意if条件就行了

        $arr = [
            0 =>[
                a=>1,
                b=>3,
                c=>3
            ],
            1=>[
                a=>2,
                b=>2,
                c=>3
            ],
            2=>[
                a=>1,
                b=>2,
                c=>3
            ]
        ];
        for($i = 0;$i < count($arr); $i++){
            for($j = $i+1;$j <count($arr);$j++){
                $temp1 = $arr[$i];
                $temp2 = $arr[$j];
                if($temp1["a"] > $temp2["a"] || ($temp1["a"] == $temp2["a"] && $temp1["b"] > $temp2["b"]) || ($temp1["a"] == $temp2["a"] && $temp1["b"] == $temp2["b"] && $temp1["c"] > $temp2["c"])){
                    $arr[$i] = $temp2;
                    $arr[$j] = $temp1;
                }
            }
        }
        var_dump($arr);
$arr = [
    0 =>   [
        'a' => 1,
        'b' => 2,
        'c' => 4,
    ],
    1 =>   [
        'a' => 4,
        'b' => 2,
        'c' => 3,
    ],
    2 =>   [
        'a' => 1,
        'b' => 2,
        'c' => 3,
    ],
    3 =>   [
        'a' => 3,
        'b' => 2,
        'c' => 3,
    ],
    4 =>   [
        'a' => 2,
        'b' => 2,
        'c' => 3,
    ],
];

sort($arr);
var_dump($arr);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题