如果您想在类或对象中使用 uasort,这里有一个关于语法的快速提醒
<?php
// 过程化:
uasort($collection, 'my_sort_function');
// 面向对象
uasort($collection, array($this, 'mySortMethod'));
// 面向对象,使用静态方法
uasort($collection, array('self', 'myStaticSortMethod'));
?>
(PHP 4, PHP 5, PHP 7, PHP 8)
uasort — 使用用户定义的比较函数对数组进行排序并保持索引关联
使用用户定义的比较函数对 array
进行就地排序,使其键保持与其关联的值的相关性。
这主要用于对关联数组进行排序,其中实际元素顺序很重要。
注意:
如果两个成员比较为相等,则它们保留其原始顺序。在 PHP 8.0.0 之前,它们在已排序数组中的相对顺序是未定义的。
注意:
将数组的内部指针重置为第一个元素。
array
输入数组。
callback
比较函数必须返回一个小于、等于或大于零的整数,如果第一个参数分别被认为小于、等于或大于第二个参数。
始终返回 true
。
示例 #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 )
如果您想在类或对象中使用 uasort,这里有一个关于语法的快速提醒
<?php
// 过程化:
uasort($collection, 'my_sort_function');
// 面向对象
uasort($collection, array($this, 'mySortMethod'));
// 面向对象,使用静态方法
uasort($collection, array('self', 'myStaticSortMethod'));
?>
使用匿名函数的示例。
匿名函数有时会使代码更容易理解。
<?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
)
只有我,还是下面的示例具有误导性,实际上演示了更适合 usort() 的情况?
在尝试理解 uasort() 的描述后,它听起来更像是对像这样的一维数组进行排序
"john" => "$23.12"
"tim" => "$6.50"
"bob" => "$18.54"
并返回
"tim" => "$6.50"
"bob" => "$18.54"
"john" => $23.12"
(当然,假设你的排序函数省略了 $ 并作为数字进行求值——这将使 asort() 的使用变得复杂;)