对数组进行自定义排序的函数。
基础说明
语法:
usort(array &$array, callable $callback): bool
参数:
array: 要排序的数组,数组会按引用传递并直接修改。callback: 自定义的比较函数,用于定义两个元素的排序规则。
返回值:
- 返回一个布尔值,
true表示成功,false表示失败。 
比较函数的规则
自定义的比较函数接收两个参数 $a 和 $b,用于比较数组中的两个元素。返回值应遵循以下规则:
- 返回 负数:表示 
$a应排在$b前面。 - 返回 0:表示 
$a和$b的顺序不变。 - 返回 正数:表示 
$a应排在$b后面。 
使用示例
数字升序排序
$array = [3, 1, 4, 1, 5, 9, 2];
usort($array, function ($a, $b) {
return $a – $b; // 升序排序
});
print_r($array);
// 输出: [1, 1, 2, 3, 4, 5, 9]
字母降序排序
$array = [‘apple’, ‘orange’, ‘banana’, ‘grape’];
usort($array, function ($a, $b) {
return strcmp($b, $a); // 按字母降序
});
print_r($array);
// 输出: [‘orange’, ‘grape’, ‘banana’, ‘apple’]
多维数组按某个键值进行排序
$data = [
[‘name’ => ‘Alice’, ‘age’ => 25],
[‘name’ => ‘Bob’, ‘age’ => 22],
[‘name’ => ‘Charlie’, ‘age’ => 30],
];
usort($data, function ($a, $b) {
return $a[‘age’] <=> $b[‘age’]; // 按年龄升序
});
print_r($data);
/*
输出:
[
[‘name’ => ‘Bob’, ‘age’ => 22],
[‘name’ => ‘Alice’, ‘age’ => 25],
[‘name’ => ‘Charlie’, ‘age’ => 30],
]
*/
注意事项
usort会直接修改传入的数组,如果需要保留原数组,可以先array_copy。- 对于较大的数组,自定义比较函数可能会增加计算量,因为每次比较都需要调用函数。
 usort会丢弃关联数组的键并重新索引。如果需要保留键,可以使用uasort。