PHP arsort 函数
最后修改于 2025 年 3 月 13 日
PHP 的 arsort 函数根据值对关联数组进行降序排序,同时保持键值对的关联。
基本定义
arsort 函数按值对数组进行降序排序。与 rsort 不同,它保留了数组的键值对。
语法:arsort(array &$array, int $flags = SORT_REGULAR): bool。该函数会修改原始数组,成功时返回 true。
基本的 arsort 示例
这演示了按值对关联数组进行降序排序。
basic_arsort.php
<?php
$fruits = [
"apple" => 5,
"banana" => 2,
"orange" => 8,
"pear" => 3
];
arsort($fruits);
print_r($fruits);
输出显示水果按数量降序排序。键值对保持不变,只有它们的顺序发生了变化。
使用不同的标志进行排序
arsort 支持不同的排序标志以实现不同的行为。
sorting_flags.php
<?php
$numbers = [
"first" => "10",
"second" => "2",
"third" => "100",
"fourth" => "20"
];
arsort($numbers, SORT_STRING);
echo "String sort:\n";
print_r($numbers);
arsort($numbers, SORT_NUMERIC);
echo "\nNumeric sort:\n";
print_r($numbers);
第一次排序将值视为字符串(100 在 20 之前),而第二次排序进行数字比较。标志会改变值的比较方式。
对多维数组进行排序
在处理复杂数据时,我们可以将 arsort 与其他函数结合使用以进行多维排序。
multidimensional.php
<?php
$students = [
["name" => "Alice", "score" => 85],
["name" => "Bob", "score" => 92],
["name" => "Charlie", "score" => 78]
];
$scores = array_column($students, "score");
arsort($scores);
$sortedStudents = [];
foreach ($scores as $key => $value) {
$sortedStudents[] = $students[$key];
}
print_r($sortedStudents);
这会将学生按分数降序排序,同时保持完整的学生数据结构。我们首先提取分数进行排序。
按属性对对象排序
我们可以使用 arsort 按对象的某个属性对对象数组进行排序。
object_sorting.php
<?php
class Product {
public function __construct(
public string $name,
public float $price
) {}
}
$products = [
new Product("Laptop", 999.99),
new Product("Phone", 699.99),
new Product("Tablet", 399.99)
];
$prices = [];
foreach ($products as $key => $product) {
$prices[$key] = $product->price;
}
arsort($prices);
$sortedProducts = [];
foreach ($prices as $key => $price) {
$sortedProducts[] = $products[$key];
}
print_r($sortedProducts);
此示例按价格降序对产品进行排序。我们首先将价格提取到一个数组中,对其进行排序,然后以新顺序重建对象数组。
不区分大小写的排序
对于字符串值,我们可能希望使用自定义方法进行不区分大小写的排序。
case_insensitive.php
<?php
$words = [
"a" => "Zebra",
"b" => "apple",
"c" => "Banana",
"d" => "orange"
];
$lowercaseValues = array_map('strtolower', $words);
arsort($lowercaseValues);
$sortedWords = [];
foreach ($lowercaseValues as $key => $value) {
$sortedWords[$key] = $words[$key];
}
print_r($sortedWords);
这会将单词按字母顺序降序排序,忽略大小写。我们创建一个包含小写值的临时数组以进行不区分大小写的比较。
最佳实践
- 保留键:当您需要维护键值关联时,请使用
arsort。 - 排序标志:为您的数据类型选择合适的排序标志。
- 大型数组:对于非常大的数组,请考虑更有效的排序算法。
- 复杂数据:与其它数组函数结合使用以进行多维排序。
来源
本教程涵盖了 PHP 的 arsort 函数,并通过实际示例展示了其在各种排序场景中的用法。
作者
列出 所有 PHP 数组函数。