主题
  • 默认模式
  • 浅蓝色模式
  • 淡绿色模式
  • 深夜模式

PHP 数组排序

PHP 提供了多种强大的数组排序函数,可以满足各种排序需求。

本章节介绍了 PHP 函数库中的数组排序方法,包括基本排序自定义排序多维数组排序等高级技巧。


PHP 基本排序

1. sort() - 标准升序排序

用于对数组元素进行升序排列,重新建立数字索引(0,1,2...)。适用于不需要保留原始键名的简单数值或字符串数组排序。

✅ 下面使用sort()函数演示数组的值升序排序:

$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
print_r($fruits);

✅ 输出结果:

Array
(
    [0] => apple
    [1] => banana
    [2] => lemon
    [3] => orange
)

2. rsort() - 标准降序排序

用于对数组元素进行降序排列,同时重置数字索引。与sort()函数功能相反,适合需要反向排序的场景。

✅ 下面使用rsort()函数演示数组的值降序排序:

$fruits = array("lemon", "orange", "banana", "apple");
rsort($fruits);
print_r($fruits);

✅ 输出结果:

Array
(
    [0] => orange
    [1] => lemon
    [2] => banana
    [3] => apple
)

3. ksort() - 键名升序排序

按照键名的字典顺序进行升序排列,同时保持键值对应关系。常用于需要按键名字母顺序整理的数据。

✅ 下面使用ksort()函数演示键名升序排序:

$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
print_r($fruits);

✅ 输出结果:

Array
(
    [a] => orange
    [b] => banana
    [c] => apple
    [d] => lemon
)

4. krsort() - 键名降序排序

按照键名字典顺序进行降序排列,同时维持键值对应关系。与ksort()排序方向相反,适合反向键名排序需求。

✅ 下面使用krsort()函数演示键名降序排序:

$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
krsort($fruits);
print_r($fruits);

✅ 输出结果:

Array
(
    [d] => lemon
    [c] => apple
    [b] => banana
    [a] => orange
)

5. asort() - 关联数组值升序排序

在保持键值对关联关系的情况下,对数组值进行升序排序。特别适合需要保留键名对应关系的关联数组排序。

✅ 下面使用asort()函数演示关联数组值升序排序:

$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
asort($fruits);
print_r($fruits);

✅ 输出结果:

Array
(
    [c] => apple
    [b] => banana
    [d] => lemon
    [a] => orange
)

6. arsort() - 关联数组值降序排序

保持键值关联的同时,按数组值进行降序排序。与asort()函数排序方向相反,但同样保留原始键名。

✅ 下面使用arsort()函数演示关联数组值降序排序:

$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
arsort($fruits);
print_r($fruits);

✅ 输出结果:

Array
(
    [a] => orange
    [d] => lemon
    [b] => banana
    [c] => apple
)

PHP 自定义排序

1. usort() - 使用用户自定义函数对值排序

usort()由于使用自定义函数进行比较,性能通常不如内置的排序函数(如sort())。在对大型数组排序时,应考虑性能影响。

✅ 下面使用usort()函数演示使用用户自定义函数对值排序:

$fruits = ["apple", "orange", "banana", "kiwi", "pear"];

usort($fruits, function($a, $b) {
    return strlen($a) <=> strlen($b);
});

print_r($fruits);

✅ 输出结果:

Array ( [0] => pear [1] => kiwi [2] => apple [3] => orange [4] => banana )

2. uasort() - 使用自定义函数保持索引关联排序

uasort()会保持键值关联,这与usort()不同,后者会重新索引数组。

✅ 下面使用uasort()函数演示使用自定义函数保持索引关联排序:

$fruits = [
    'a' => 'orange',
    'b' => 'banana',
    'c' => 'apple',
    'd' => 'grape'
];

// 自定义比较函数
function compare($a, $b) {
    return strcmp($a, $b);
}

// 使用uasort排序
uasort($fruits, 'compare');

print_r($fruits);

✅ 输出结果:

Array
(
    [c] => apple
    [b] => banana
    [d] => grape
    [a] => orange
)

3. uksort() - 使用自定义函数按键名排序

uksort()会保留键名,这与usort()不同(usort()会重新索引数字键)

✅ 下面使用uksort()函数演示使用自定义函数按键名排序:

function compareKeys($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$array = ["banana" => "yellow", "apple" => "red", "orange" => "orange"];
uksort($array, "compareKeys");

print_r($array);

✅ 输出结果:

Array
(
    [apple] => red
    [banana] => yellow
    [orange] => orange
)

PHP 多维数组排序

1. 使用 usort 对多维数组排序

usort()允许你使用自定义的比较函数对数组进行排序。对于多维数组的排序尤其有用。

✅ 下面使用uksort()函数演示使用 usort 对多维数组排序:

$people = [
    ["name" => "John", "age" => 28],
    ["name" => "Jane", "age" => 24],
    ["name" => "Doe", "age" => 32]
];

// 按age升序排序
usort($people, function($a, $b) {
    return $a['age'] <=> $b['age'];
});

print_r($people);

✅ 输出结果:

Array (
    [0] => Array ( [name] => Jane [age] => 24 )
    [1] => Array ( [name] => John [age] => 28 )
    [2] => Array ( [name] => Doe [age] => 32 )
)

2. 使用 array_multisort 对多维数组排序

array_multisort()()可以同时对多个数组进行排序,或者对一个多维数组的多个维度进行排序。

✅ 下面使用array_multisort()函数演示对多维数组排序:

$data = [
    ['name' => 'John', 'age' => 25, 'score' => 85],
    ['name' => 'Alice', 'age' => 30, 'score' => 92],
    ['name' => 'Bob', 'age' => 20, 'score' => 78],
    ['name' => 'Charlie', 'age' => 28, 'score' => 88]
];

// 提取要排序的列
$ages = array_column($data, 'age');
$scores = array_column($data, 'score');

// 先按年龄升序,再按分数降序排列
array_multisort($ages, SORT_ASC, $scores, SORT_DESC, $data);

print_r($data);

✅ 输出结果:

Array
(
    [0] => Array
        (
            [name] => Bob
            [age] => 20
            [score] => 78
        )

    [1] => Array
        (
            [name] => John
            [age] => 25
            [score] => 85
        )

    [2] => Array
        (
            [name] => Charlie
            [age] => 28
            [score] => 88
        )

    [3] => Array
        (
            [name] => Alice
            [age] => 30
            [score] => 92
        )
)

完整的 PHP Array 参考手册

如需获取更全面的数组函数参考信息,请查阅我们的 PHP 数组函数手册

该参考手册详细介绍了每个函数的功能说明和实际应用示例。



评论区 0
发表评论
教程介绍
PHP 通用开源服务器端脚本语言,特别适用于 Web 开发,能够嵌入 HTML 中使用。
20 章节
18 阅读
0 评论