uasort

(PHP 4, PHP 5, PHP 7, PHP 8)

uasort使用用户定义的比较函数对数组进行排序并保持索引关联

说明

uasort(array &$array, callable $callback): true

使用用户定义的比较函数对 array 进行就地排序,使其键保持与其关联的值的相关性。

这主要用于对关联数组进行排序,其中实际元素顺序很重要。

注意:

如果两个成员比较为相等,则它们保留其原始顺序。在 PHP 8.0.0 之前,它们在已排序数组中的相对顺序是未定义的。

注意:

将数组的内部指针重置为第一个元素。

参数

array

输入数组。

callback

比较函数必须返回一个小于、等于或大于零的整数,如果第一个参数分别被认为小于、等于或大于第二个参数。

callback(mixed $a, mixed $b): int
警告

从比较函数返回非整数值(例如 float)会导致回调返回值内部强制转换为 int。因此,诸如 0.990.1 之类的值都将强制转换为 0 的整数值,这将比较这些值作为相等值。

返回值

始终返回 true

变更日志

版本 说明
8.2.0 返回类型现在是 true;之前是 bool.
8.0.0 如果 callback 期待按引用传递参数,则此函数现在将发出 E_WARNING

示例

示例 #1 基本 uasort() 示例

<?php
// 比较函数
function cmp($a, $b) {
if (
$a == $b) {
return
0;
}
return (
$a < $b) ? -1 : 1;
}

// 要排序的数组
$array = array('a' => 4, 'b' => 8, 'c' => -1, 'd' => -9, 'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4);
print_r($array);

// 排序并打印结果数组
uasort($array, 'cmp');
print_r($array);
?>

上面的示例将输出

Array
(
    [a] => 4
    [b] => 8
    [c] => -1
    [d] => -9
    [e] => 2
    [f] => 5
    [g] => 3
    [h] => -4
)
Array
(
    [d] => -9
    [h] => -4
    [c] => -1
    [e] => 2
    [g] => 3
    [a] => 4
    [f] => 5
    [b] => 8
)

参见

添加注释

用户贡献的注释 3 个注释

153
magikMaker
13 年前
如果您想在类或对象中使用 uasort,这里有一个关于语法的快速提醒

<?php

// 过程化:
uasort($collection, 'my_sort_function');

// 面向对象
uasort($collection, array($this, 'mySortMethod'));

// 面向对象,使用静态方法
uasort($collection, array('self', 'myStaticSortMethod'));

?>
34
yannick dot battail at gmail dot com
13 年前
使用匿名函数的示例。
匿名函数有时会使代码更容易理解。
<?php
$fruits
= array('Orange9','Orange11','Orange10','Orange6','Orange15');
uasort ( $fruits , function ($a, $b) {
return
strnatcmp($a,$b); // 或其他函数/代码
}
);
print_r($fruits);
?>
返回值
数组
(
[3] => Orange6
[0] => Orange9
[2] => Orange10
[1] => Orange11
[4] => Orange15
)
3
php at eden2 dot com
21 年前
只有我,还是下面的示例具有误导性,实际上演示了更适合 usort() 的情况?

在尝试理解 uasort() 的描述后,它听起来更像是对像这样的一维数组进行排序

"john" => "$23.12"
"tim" => "$6.50"
"bob" => "$18.54"

并返回

"tim" => "$6.50"
"bob" => "$18.54"
"john" => $23.12"

(当然,假设你的排序函数省略了 $ 并作为数字进行求值——这将使 asort() 的使用变得复杂;)
To Top