PHP的多维数组排序

熟悉PHP的小伙伴都知道有很多内置函数可以对数组进行排序操作或者自定义一些排序方法(冒泡)等等。

PHP排序函数

sort() 函数用于对数组单元升序排序。
rsort() 函数用于对数组单元降序排序。
asort() 函数用于对数组单元升序排序并保持索引关系。
arsort() 函数用于对数组单元降序排序并保持索引关系。
ksort() 函数用于对数组单元按照键名升序排序。
krsort() 函数用于对数组单元按照键名降序排序。

以上函数都针对的是一维数组的排序。

二维数组排序函数

array_multisort()函数可以对多个数组或多维数组进行排序,或者根据某一维或多维对多维数组进行排序。

array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] ) : bool

多维数组排序

假设有一个二维数组

$sortArr = [
['id' => 12, 'money' => 99],
['id' => 1, 'money' => 98],
['id' => 5, 'money' => 94]
];

根据id进行升序排序

// 获取数组中id值
$ids = array_column($sortArr, 'id');
// 第一个参数就是需要排序key的值,传入后相当于先对 $ids 进行排序,然后根据排序后的$ids的key重新构建需要排序的$sortArr
array_multisort($ids, SORT_ASC, $sortArr);
print_r($sortArr);

输出结果

Array
(
    [0] => Array
        (
            [id] => 1
            [money] => 98
        )

    [1] => Array
        (
            [id] => 5
            [money] => 94
        )

    [2] => Array
        (
            [id] => 12
            [money] => 99
        )

)

多维数组多个key值排序

使用上一个例子的数组,并且多增加一个排序key。

$sortArr = [
    ['id' => 12, 'money' => 99, 'sort' => 0],
    ['id' => 1, 'money' => 98, 'sort' => 0],
    ['id' => 5, 'money' => 94, 'sort' => 1]
];

先通过排序字段进行降序,再通过金额进行降序

$moneys = array_column($sortArr, 'money');
$sorts = array_column($sortArr, 'sort');
array_multisort($sorts, SORT_DESC, $moneys, SORT_DESC, $sortArr);
print_r($sortArr);

输出结果

Array
(
    [0] => Array
        (
            [id] => 5
            [money] => 94
            [sort] => 1
        )

    [1] => Array
        (
            [id] => 12
            [money] => 99
            [sort] => 0
        )

    [2] => Array
        (
            [id] => 1
            [money] => 98
            [sort] => 0
        )

)
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注