PHP 多维数组排序(usort,uasort)

让我为您详细讲解一下“PHP 多维数组排序”的完整攻略。

让我为您详细讲解一下“PHP 多维数组排序”的完整攻略。

简介

多维数组是指一个数组中包含另一个或多个数组的数组。在实际开发中,我们经常需要对多维数组进行排序,这时PHP提供了两个非常方便的函数 usortuasort 来实现多维数组的排序。

usort 函数

usort 函数用于对数组进行排序,它使用用户自定义的比较函数进行排序。该函数的语法如下:

usort(array &$array, callable $cmp_function): bool

其中,参数 $array 是需要排序的数组,参数 $cmp_function 是用户自定义的比较函数。

比较函数 $cmp_function 必须接收两个参数来比较,接收的参数类型是 mixed。如果第一个参数小于第二个参数,返回负数;如果第一个参数大于第二个参数,返回正数;如果两个参数相等,返回 0。

示例代码:

$people = [
    ['name' => 'Alice', 'age' => 20],
    ['name' => 'Bob', 'age' => 30],
    ['name' => 'Charlie', 'age' => 25]
];

// 按年龄从小到大排序
usort($people, function($a, $b) {
    return $a['age'] - $b['age'];
});

print_r($people);

输出结果:

Array
(
    [0] => Array
        (
            [name] => Alice
            [age] => 20
        )

    [1] => Array
        (
            [name] => Charlie
            [age] => 25
        )

    [2] => Array
        (
            [name] => Bob
            [age] => 30
        )

)

uasort 函数

uasort 函数也用于对数组进行排序,它使用用户自定义的比较函数进行排序。和 usort 不同的是,uasort 保留了数组的键名。该函数的语法如下:

uasort(array &$array, callable $cmp_function): bool

其中,参数 $array 是需要排序的数组,参数 $cmp_function 是用户自定义的比较函数。

比较函数 $cmp_function 的参数和 usort 完全一样,只是 $cmp_function 必须返回一个整数来表示比较结果。如果返回负数,表示第一个参数小于第二个参数;如果返回正数,表示第一个参数大于第二个参数;如果返回 0,表示两个参数相等。

示例代码:

$people = [
    'p1' => ['name' => 'Alice', 'age' => 20],
    'p2' => ['name' => 'Bob', 'age' => 30],
    'p3' => ['name' => 'Charlie', 'age' => 25]
];

// 按年龄从小到大排序
uasort($people, function($a, $b) {
    return $a['age'] - $b['age'];
});

print_r($people);

输出结果:

Array
(
    [p1] => Array
        (
            [name] => Alice
            [age] => 20
        )

    [p3] => Array
        (
            [name] => Charlie
            [age] => 25
        )

    [p2] => Array
        (
            [name] => Bob
            [age] => 30
        )

)

总结

usortuasort 函数都可以用于对多维数组进行排序,其中 uasort 函数保留了数组的键名。需要注意的是,比较函数的参数和返回值需要按照要求来实现,并且必须传入可调用对象。

希望以上内容能够帮助到您。

本文标题为:PHP 多维数组排序(usort,uasort)

基础教程推荐