ZetCode

PHP asort 函数

最后修改于 2025 年 3 月 13 日

PHP asort 函数以升序对关联数组进行排序,同时保持索引关联。它对于排序键值关系很重要的数组很有用。

基本定义

asort 函数根据其值对数组进行排序,同时保持键与各自值的关联。它会直接修改原始数组。

语法: asort(array &$array, int $flags = SORT_REGULAR): bool。函数成功时返回 true,失败时返回 false。可选的 flags 参数会修改排序行为。

基本的 asort 示例

这演示了在保持键值对的同时,按值对关联数组进行排序。

basic_asort.php
<?php

$fruits = [
    "a" => "orange",
    "b" => "banana",
    "c" => "apple"
];

asort($fruits);

print_r($fruits);

输出: Array ( [c] => apple [b] => banana [a] => orange )。数组按值字母顺序排序,同时保留键。

对数字值进行排序

asort 可以在保持键的同时对包含数字值的数组进行排序。

numeric_asort.php
<?php

$scores = [
    "Alice" => 85,
    "Bob" => 92,
    "Charlie" => 78
];

asort($scores);

print_r($scores);

输出: Array ( [Charlie] => 78 [Alice] => 85 [Bob] => 92 )。分数按从小到大的顺序排序,同时保持姓名键。

使用排序标志

可选的第二个参数允许指定不同的排序行为。

flags_asort.php
<?php

$mixedNumbers = [
    "first" => "10",
    "second" => 2,
    "third" => "1"
];

asort($mixedNumbers, SORT_NUMERIC);

print_r($mixedNumbers);

输出: Array ( [third] => 1 [second] => 2 [first] => 10 )SORT_NUMERIC 标志确保对值进行数字比较。

使用自定义比较进行排序

对于复杂的排序,将 asortuksort 结合使用。

custom_asort.php
<?php

$products = [
    "widgetA" => ["price" => 15, "rating" => 4],
    "widgetB" => ["price" => 10, "rating" => 5],
    "widgetC" => ["price" => 20, "rating" => 3]
];

// Sort by price then rating
uasort($products, function($a, $b) {
    return $a["price"] <=> $b["price"] ?: $a["rating"] <=> $b["rating"];
});

print_r($products);

输出显示产品首先按价格排序,然后按评分排序。宇宙飞船运算符 (<=>) 简化了比较逻辑。

使用 arsort 进行反向排序

相关的 arsort 函数按降序排序。

reverse_asort.php
<?php

$ages = [
    "John" => 25,
    "Mary" => 30,
    "Peter" => 20
];

arsort($ages);

print_r($ages);

输出: Array ( [Mary] => 30 [John] => 25 [Peter] => 20 )arsort 在按从高到低排序的同时保持键关联。

最佳实践

来源

PHP asort 文档

本教程涵盖了 PHP asort 函数,并通过实际示例展示了其在对关联数组进行排序时的用法。

作者

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

列出 所有 PHP 数组函数