ZetCode

PHP uasort 函数

最后修改于 2025 年 3 月 13 日

PHP uasort 函数使用用户定义的比较函数对数组进行排序,同时保持索引关联。它对于必须保留键值对的关联数组非常有用。

基本定义

uasort 函数使用回调比较函数对数组进行排序。与 usort 不同,它保留原始数组键。

语法:uasort(array &$array, callable $callback): bool。回调必须返回小于、等于或大于零的整数。

基本 uasort 示例

此示例演示了按值对关联数组进行排序,同时保持键值对的完整性。

basic_uasort.php
<?php

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

function compare($a, $b) {
    return strcmp($a, $b);
}

uasort($fruits, 'compare');

print_r($fruits);

这将按值的字母顺序对 fruits 数组进行排序,同时保留原始键。输出显示了保留键值对的已排序数组。

按字符串长度排序

按字符串值长度对关联数组进行排序,同时保留原始键。

string_length_sort.php
<?php

$words = [
    "first" => "cat",
    "second" => "elephant",
    "third" => "dog",
    "fourth" => "giraffe"
];

uasort($words, function($a, $b) {
    return strlen($a) - strlen($b);
});

print_r($words);

该数组按单词长度升序排序。匿名回调函数比较字符串长度以确定顺序。

按属性对对象排序

按特定属性对对象数组进行排序,同时保留原始数组键。

object_property_sort.php
<?php

class Product {
    public function __construct(
        public string $name,
        public float $price
    ) {}
}

$products = [
    "p1" => new Product("Laptop", 999.99),
    "p2" => new Product("Phone", 699.99),
    "p3" => new Product("Tablet", 399.99)
];

uasort($products, function($a, $b) {
    return $a->price <=> $b->price;
});

print_r($products);

这将按价格升序对产品进行排序。三元运算符 (<=>) 简化了数值的比较。

不区分大小写的排序

对关联数组执行不区分大小写的排序,同时保留原始键。

case_insensitive_sort.php
<?php

$names = [
    "user1" => "John",
    "user2" => "alice",
    "user3" => "Bob",
    "user4" => "CHARLIE"
];

uasort($names, function($a, $b) {
    return strcasecmp($a, $b);
});

print_r($names);

该数组按字母顺序排序,不考虑字母大小写。strcasecmp 函数处理不区分大小写的比较。

多维数组排序

按特定的子数组值对多维关联数组进行排序,同时保留外部数组键。

multi_dimensional_sort.php
<?php

$employees = [
    "e1" => ["name" => "Alice", "salary" => 55000],
    "e2" => ["name" => "Bob", "salary" => 45000],
    "e3" => ["name" => "Charlie", "salary" => 60000]
];

uasort($employees, function($a, $b) {
    return $b["salary"] <=> $a["salary"];
});

print_r($employees);

这将按工资降序对员工进行排序。回调函数访问每个子数组中的工资值以进行比较。

最佳实践

来源

PHP uasort 文档

本教程涵盖了 PHP uasort 函数,并提供了实际示例,展示了其在保留键的同时对关联数组进行排序的用法。

作者

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

列出 所有 PHP 数组函数