多维数组排序,如果a相等,那么比较b,b相等再比较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,
],
];
伊谢尔伦2017-04-11 12:31:31
好吧 ,我是这样用的
<?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);
天蓬老师2017-04-11 12:31:31
多维数组的排序和一维数组排序一样,只要注意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);
天蓬老师2017-04-11 12:31:31
$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);