php多维数组排序,按某个键排序,这是除了自带函数array_multisort外的自定义函数

数组排序是比较常见的功能,比如在获取数据必须根据id倒序是,显示又必须要按照正序就要二次排序,场景比如聊天信息的获取,在聊天框中实时获取最新数据就这样。还有其他情况,比如按某个数值的大小进行排序等。

这个函数比较好用,不用记录太多,不过只能对某个键key进行排序,不能同时处理多个数组(多个直接用array_multisort()函数):

/**
 * 二维码数组排序
 * @param $array array 数组
 * @param $keys string 需要排序的键名
 * @param string $type 排序类型,asc-正序,desc-倒序
 * @return array
 */
function array_sort($array, $keys, $type='asc'){
    $keysvalue = $new_array = array();
    foreach ($array as $k => $v){
        $keysvalue[$k] = $v[$keys];
    }
    if($type == 'asc'){
        asort($keysvalue);
    }else{
        arsort($keysvalue);
    }
    reset($keysvalue);
    foreach ($keysvalue as $k => $v){
        $new_array[$k] = $array[$k];
    }
    return $new_array;
}
$abc = [
    ['id'=>1,'n'=>'b','s'=>'b'],
    ['id'=>2,'n'=>'aa','s'=>'c'],
    ['id'=>3,'n'=>'ac','s'=>'b'],
];

print_r(array_sort($abc,'n','asc'));
print_r(array_sort($abc,'id','desc'));
print_r(array_sort($abc,'s','desc'));

demo运行结果:

Array
(
    [1] => Array
        (
            [id] => 2
            [n] => aa
            [s] => c
        )

    [2] => Array
        (
            [id] => 3
            [n] => ac
            [s] => b
        )

    [0] => Array
        (
            [id] => 1
            [n] => b
            [s] => b
        )

)
Array
(
    [2] => Array
        (
            [id] => 3
            [n] => ac
            [s] => b
        )

    [1] => Array
        (
            [id] => 2
            [n] => aa
            [s] => c
        )

    [0] => Array
        (
            [id] => 1
            [n] => b
            [s] => b
        )

)
Array
(
    [1] => Array
        (
            [id] => 2
            [n] => aa
            [s] => c
        )

    [0] => Array
        (
            [id] => 1
            [n] => b
            [s] => b
        )

    [2] => Array
        (
            [id] => 3
            [n] => ac
            [s] => b
        )

)


另外用自定义的usort同样可以:

usort($abc, function ($a, $b) {
    return $b['id'] - $a['id'];
});


评论/留言