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 数组函数。