php sort实现
PHP 数组排序实现
PHP 提供了多种内置函数用于数组排序,根据不同的需求可以选择合适的排序函数。以下是常见的排序方法:
1. 简单升序排序(sort)
$array = [3, 1, 4, 1, 5, 9, 2, 6];
sort($array);
print_r($array);
输出结果为升序排列的数组。
2. 简单降序排序(rsort)
$array = [3, 1, 4, 1, 5, 9, 2, 6];
rsort($array);
print_r($array);
输出结果为降序排列的数组。
3. 保持键值关联的升序排序(asort)
$array = ['b' => 3, 'a' => 1, 'c' => 4];
asort($array);
print_r($array);
排序后保持键与值的关联关系。
4. 保持键值关联的降序排序(arsort)
$array = ['b' => 3, 'a' => 1, 'c' => 4];
arsort($array);
print_r($array);
排序后保持键与值的关联关系。
5. 按键名升序排序(ksort)
$array = ['b' => 3, 'a' => 1, 'c' => 4];
ksort($array);
print_r($array);
按照键名进行升序排序。
6. 按键名降序排序(krsort)
$array = ['b' => 3, 'a' => 1, 'c' => 4];
krsort($array);
print_r($array);
按照键名进行降序排序。
7. 自定义排序(usort)
function compare($a, $b) {
if ($a == $b) return 0;
return ($a < $b) ? -1 : 1;
}
$array = [3, 1, 4, 1, 5, 9, 2, 6];
usort($array, 'compare');
print_r($array);
通过自定义比较函数实现复杂排序逻辑。
8. 自然排序(natsort)
$array = ['img1.png', 'img10.png', 'img2.png'];
natsort($array);
print_r($array);
按照自然顺序排序,适合处理包含数字的字符串。
9. 不区分大小写的自然排序(natcasesort)
$array = ['Img1.png', 'img10.png', 'img2.png'];
natcasesort($array);
print_r($array);
忽略大小写的自然顺序排序。
10. 多维数组排序
$array = [
['name' => 'John', 'age' => 25],
['name' => 'Jane', 'age' => 22]
];
usort($array, function($a, $b) {
return $a['age'] - $b['age'];
});
print_r($array);
通过自定义函数对多维数组进行排序。
11. 随机排序(shuffle)
$array = [1, 2, 3, 4, 5];
shuffle($array);
print_r($array);
随机打乱数组顺序。
12. 反向排序(array_reverse)
$array = [1, 2, 3, 4, 5];
$reversed = array_reverse($array);
print_r($reversed);
不改变原数组顺序,返回一个新数组。
13. 多条件排序
$array = [
['name' => 'John', 'age' => 25, 'score' => 80],
['name' => 'Jane', 'age' => 22, 'score' => 90],
['name' => 'Doe', 'age' => 25, 'score' => 70]
];
usort($array, function($a, $b) {
if ($a['age'] == $b['age']) {
return $b['score'] - $a['score'];
}
return $a['age'] - $b['age'];
});
print_r($array);
实现先按年龄升序,年龄相同再按分数降序的复杂排序。
14. 保留键名的随机排序
$array = ['a' => 1, 'b' => 2, 'c' => 3];
uksort($array, function() { return rand(-1, 1); });
print_r($array);
保持键名关联的随机排序。
15. 根据外部条件排序
$order = ['apple', 'orange', 'banana'];
$array = ['banana', 'apple', 'orange'];
usort($array, function($a, $b) use ($order) {
return array_search($a, $order) - array_search($b, $order);
});
print_r($array);
按照预定义的外部顺序进行排序。







