ZetCode

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 的 uksort 函数,并通过实际示例展示了各种键排序场景和自定义比较逻辑。

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PHP 数组函数