PHP二维数组多字段排序的两种方法、

466 阅读1分钟

第一种、

$data[] = array('volume' => 67, 'edition' => 2, 'asd' => 'b');
$data[] = array('volume' => 86, 'edition' => 1, 'cc' => 'b');
$data[] = array('volume' => 85, 'edition' => 6, 'test' => 'b');
$data[] = array('volume' => 98, 'edition' => 2, 'eq' => 'b');
$data[] = array('volume' => 86, 'edition' => 3, 'jr' => 'b');
$data[] = array('volume' => 67, 'edition' => 7, ' wt' => 'b');
//获取要排序的字段
$edit = array_column($data, 'edition');
//先进行列排序,然后让$data数组按该字段来排序。
array_multisort($edit, SORT_DESC, $data);

//如果还有其他排序条件,则往函数后添加,最后再填写$data。 和mysql order相似,参数的字段越前,优先级越高。
$vol = array_column($data,'volume');
array_multisort($vol,SORT_ASC,$edit,SORT_DESC,$data);

image.png

第二种、

usort 排序会导致二维数组的key改变(key a,b,c 变成 012 这种)
如果不在意key的改变可以用这种
$arr 是引用
$arr = [
    'a' => ['a' => 11, 'b' => 12, 'c' => 13],
    'b' => ['a' => 10, 'b' => 13, 'c' => 12],
    'c' => ['a' => 12, 'b' => 11, 'c' => 10],
];
usort($arr, function ($current, $next) {
    # 正序排
    return $current['a'] < $next['a'];
});

image.png