PHP数组排序优先使用内置函数(如sort、usort等),其底层由C实现且高效;手动实现时可选冒泡、选择或快速排序等算法,但仅适用于学习或特殊场景。
PHP中数组排序不仅依赖算法,更常用的是内置函数来实现。虽然底层会涉及经典排序算法,但开发者通常通过函数调用完成操作。以下是常见排序方式和其背后的逻辑。
PHP提供了多个函数用于数组排序,适合大多数实际开发场景:
示例:
$fruits = ['banana', 'apple', 'orange']; sort($fruits); // 结果:['apple', 'banana', 'orange']
如果需要手动实现排序算法(如面试或学习),以下是几种经典算法的PHP写法:
冒泡排序(Bubble Sort)
function bubbleSort($arr) {
$n = count($arr);
for ($i = 0; $i < $n - 1; $i++) {
for ($j = 0; $j < $n - $i - 1; $j++) {
if ($arr[$j] > $arr[$j + 1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $temp;
}
}
}
return $arr;
}
选择排序(Selection Sort)
function selectionSort($arr) {
$n = count($arr);
for ($i = 0; $i < $n - 1; $i++) {
$minIndex = $i;
for ($j = $i + 1; $j < $n; $j++) {
if ($arr[$j] < $arr[$minIndex]) {
$minIndex = $j;
}
}
if ($minIndex != $i) {
$temp = $arr[$i];
$arr[$i] = $arr[$minIndex];
$arr[$minIndex] = $temp;
}
}
return $arr;
}
快速排序(Quick Sort)
function quickSort($arr) {
if (count($arr) <= 1) {
return $arr;
}
$pivot = $arr[0];
$left = $right = [];
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i] < $pivot) {
$left[] = $arr[$i];
} else {
$right[] = $arr[$i];
}
}
return array_merge(quickSort($left), [$pivot], quickSort($right));
}
处理复杂数据时,比如按多维数组中某个字段排序,可用 usort 配合匿名函数:
$users = [ ['name' => 'Alice', 'age' => 30], ['name' => 'Bob', 'age' => 25], ['name' => 'Charlie', 'age' => 35] ];
usort($users, function($a, $b) { return $a['age'] <=> $b['age']; // 升序 });
使用“”太空船运算符可简化比较逻辑。
不同算法适用场景不同:
基本上就这些。日常开发用内置函数足够,理解算法有助于深入掌握逻辑。