php 实现排序
PHP 实现排序的方法
PHP 提供了多种排序方法,可以根据不同的需求选择合适的排序方式。以下是常见的几种排序实现方法:
内置排序函数
PHP 内置了多种排序函数,适用于数组排序:
-
sort() - 对数组进行升序排序
$numbers = [4, 2, 8, 6]; sort($numbers); print_r($numbers); -
rsort() - 对数组进行降序排序
$numbers = [4, 2, 8, 6]; rsort($numbers); print_r($numbers); -
asort() - 根据值对关联数组进行升序排序,保持键值关联
$age = ["Peter"=>"35", "Ben"=>"37", "Joe"=>"43"]; asort($age); print_r($age); -
ksort() - 根据键对关联数组进行升序排序
$age = ["Peter"=>"35", "Ben"=>"37", "Joe"=>"43"]; ksort($age); print_r($age);
自定义排序
对于更复杂的排序需求,可以使用 usort()、uasort() 或 uksort() 函数,它们允许自定义比较函数:
function compare($a, $b) {
if ($a == $b) return 0;
return ($a < $b) ? -1 : 1;
}
$numbers = [4, 2, 8, 6];
usort($numbers, "compare");
print_r($numbers);
冒泡排序实现
如果需要手动实现排序算法,以下是冒泡排序的 PHP 实现:
function bubbleSort($array) {
$n = count($array);
for ($i = 0; $i < $n; $i++) {
for ($j = 0; $j < $n - $i - 1; $j++) {
if ($array[$j] > $array[$j+1]) {
$temp = $array[$j];
$array[$j] = $array[$j+1];
$array[$j+1] = $temp;
}
}
}
return $array;
}
$numbers = [64, 34, 25, 12, 22, 11, 90];
$sorted = bubbleSort($numbers);
print_r($sorted);
快速排序实现
快速排序是另一种高效的排序算法,PHP 实现如下:
function quickSort($array) {
if (count($array) <= 1) return $array;
$pivot = $array[0];
$left = $right = [];
for ($i = 1; $i < count($array); $i++) {
if ($array[$i] < $pivot) {
$left[] = $array[$i];
} else {
$right[] = $array[$i];
}
}
return array_merge(quickSort($left), [$pivot], quickSort($right));
}
$numbers = [10, 80, 30, 90, 40, 50, 70];
$sorted = quickSort($numbers);
print_r($sorted);
多维数组排序
对于多维数组,可以使用 array_multisort() 或自定义排序函数:
$data = [
['name' => 'John', 'age' => 25],
['name' => 'Jane', 'age' => 22],
['name' => 'Dave', 'age' => 30]
];
// 根据 age 字段排序
usort($data, function($a, $b) {
return $a['age'] - $b['age'];
});
print_r($data);
对象排序
对对象数组进行排序时,可以使用类似的方法:
class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}
$people = [
new Person('John', 25),
new Person('Jane', 22),
new Person('Dave', 30)
];
usort($people, function($a, $b) {
return $a->age - $b->age;
});
foreach ($people as $person) {
echo $person->name . ': ' . $person->age . "\n";
}
这些方法涵盖了 PHP 中大多数常见的排序需求,从简单的数组排序到复杂的自定义排序场景。







