PHP uksort 函数
最后修改于 2025 年 3 月 13 日
PHP 的 uksort 函数使用用户定义的比较函数按键对数组进行排序。它在排序过程中保持键值关联。
基本定义
uksort 函数使用回调比较函数按键对数组进行排序。它会修改原始数组并在成功时返回 true。
语法:uksort(array &$array, callable $callback): bool。该回调比较两个键,并返回小于零、等于零或大于零的整数。
基本的 uksort 示例
此示例演示如何按升序对关联数组的键进行排序。
basic_uksort.php
<?php
$data = [
"banana" => 3,
"apple" => 2,
"orange" => 5
];
uksort($data, function($a, $b) {
return strcmp($a, $b);
});
print_r($data);
输出显示数组按键字母顺序排序。回调使用 strcmp 进行字符串比较。键与其值保持对应关系。
反向键排序
通过修改比较逻辑,按降序对数组键进行排序。
reverse_uksort.php
<?php
$data = [
"banana" => 3,
"apple" => 2,
"orange" => 5
];
uksort($data, function($a, $b) {
return strcmp($b, $a); // Reverse comparison
});
print_r($data);
这通过在 strcmp 中交换 $a 和 $b 来反转键的顺序。输出显示键的顺序从“orange”到“apple”。
数字键排序
根据不同的排序需求,使用自定义比较逻辑对数字键进行排序。
numeric_uksort.php
<?php
$data = [
10 => "ten",
2 => "two",
5 => "five"
];
uksort($data, function($a, $b) {
return $a <=> $b; // Spaceship operator for numeric comparison
});
print_r($data);
太空船运算符 (<=>) 提供了清晰的数字比较。输出显示键从 2 到 10 排序,并带有它们对应的值。
不区分大小写的排序
通过修改字符串比较方法,不区分大小写地对键进行排序。
case_insensitive_uksort.php
<?php
$data = [
"Banana" => 3,
"apple" => 2,
"Orange" => 5
];
uksort($data, function($a, $b) {
return strcasecmp($a, $b); // Case-insensitive comparison
});
print_r($data);
strcasecmp 忽略大小写差异。输出显示“apple”排在前面,尽管它是小写,接着是“Banana”和“Orange”,按字母顺序排列。
自定义键排序逻辑
根据键的特征或模式实现复杂的排序逻辑。
custom_uksort.php
<?php
$data = [
"file1.txt" => "Content 1",
"file10.txt" => "Content 10",
"file2.txt" => "Content 2"
];
uksort($data, function($a, $b) {
$numA = intval(preg_replace('/[^0-9]/', '', $a));
$numB = intval(preg_replace('/[^0-9]/', '', $b));
return $numA <=> $numB;
});
print_r($data);
此代码从文件名中提取数字以进行自然排序。输出显示文件按其数字部分(1、2、10)排序,而不是按字典顺序。
最佳实践
- 一致的返回值:确保回调始终返回整数。
- 性能:避免在大型数组回调中使用复杂的逻辑。
- 可读性:为复杂的比较使用命名函数。
- 类型安全:如果键具有特定类型,请添加类型提示。
来源
本教程涵盖了 PHP 的 uksort 函数,并通过实际示例展示了各种键排序场景和自定义比较逻辑。
作者
列出 所有 PHP 数组函数。