ZetCode

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);

这会将单词按字母顺序降序排序,忽略大小写。我们创建一个包含小写值的临时数组以进行不区分大小写的比较。

最佳实践

来源

PHP arsort 文档

本教程涵盖了 PHP 的 arsort 函数,并通过实际示例展示了其在各种排序场景中的用法。

作者

我叫 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在教学编程方面拥有十多年的经验。

列出 所有 PHP 数组函数