对数组进行自定义排序的函数。

基础说明

语法:

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

 

作者 admin

百度广告效果展示