对数组进行自定义排序的函数。
基础说明
语法:
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
。