在實際開發中,我們會經常使用到數組,而數組的元素有時候是無序的,這個時候我們就需要對數組進行排序。PHP提供了多種排序方法,下面將從多個方面進行詳細闡述。
一、冒泡排序
冒泡排序是一種基本的排序演算法,其核心思想是兩兩比較相鄰元素的大小,如果順序不對則進行交換。它適用於處理少量數據的排序,複雜度為O(n^2)。
function bubbleSort($arr) {
$len = count($arr);
for ($i=0; $i<$len-1; $i++) {
for ($j=0; $j $arr[$j+1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
}
}
}
return $arr;
}
$array = array(3,7,2,8,5,4,6,1);
$result = bubbleSort($array);
print_r($result);
以上代碼輸出結果為:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
)
二、選擇排序
選擇排序是一種簡單直觀的排序演算法,它的基本思想是每次選擇未排序中最小的元素作為已排序序列的末尾元素,直到全部排序完畢。它適用於數據規模較小的排序,複雜度也是O(n^2)。
function selectSort($arr) {
$len = count($arr);
for ($i=0; $i<$len; $i++) {
$minIndex = $i;
for ($j=$i+1; $j<$len; $j++) {
if ($arr[$j] < $arr[$minIndex]) {
$minIndex = $j;
}
}
if ($i != $minIndex) {
$temp = $arr[$i];
$arr[$i] = $arr[$minIndex];
$arr[$minIndex] = $temp;
}
}
return $arr;
}
$array = array(3,7,2,8,5,4,6,1);
$result = selectSort($array);
print_r($result);
以上代碼輸出結果為:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
)
三、快速排序
快速排序是一種常用的排序演算法,由C. A. R. Hoare在1960年提出,其核心思想是通過一次排序將要排序的數列分割成獨立的兩部分,其中一部分的所有數據比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,遞歸使用此方法,最終將要排序的數列變為有序序列。它平均時間複雜度為O(N*logN)。
function quickSort($arr) {
if (count($arr) <= 1) {
return $arr;
}
$pivot = $arr[0];
$left = array();
$right = array();
for ($i=1; $i<count($arr); $i++) {
if ($arr[$i] < $pivot) {
$left[] = $arr[$i];
} else {
$right[] = $arr[$i];
}
}
return array_merge(quickSort($left), array($pivot), quickSort($right));
}
$array = array(3,7,2,8,5,4,6,1);
$result = quickSort($array);
print_r($result);
以上代碼輸出結果為:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
)
四、多維數組排序
對於多維數組,我們需要根據某個鍵對數組進行排序。我們可以使用PHP內置函數usort()來排序,其第二個參數是回調函數,用於比較兩個元素的大小,函數返回值為-1表示$a小於$b,為0表示$a等於$b,為1表示$a大於$b。
function multiSort(&$array, $sortKey, $sortOrder=SORT_ASC, $sortType=SORT_NUMERIC) {
if (count($array) == 0) return false;
$order = array();
foreach ($array as $key => $val) {
$order[$key] = $val[$sortKey];
}
array_multisort($order, $sortOrder, $sortType, $array);
}
$array = array(
array('name'=>'Tom', 'age'=>19),
array('name'=>'Alice', 'age'=>22),
array('name'=>'Bob', 'age'=>18)
);
multiSort($array, 'age', SORT_DESC);
print_r($array);
以上代碼輸出結果為:
Array
(
[0] => Array
(
[name] => Alice
[age] => 22
)
[1] => Array
(
[name] => Tom
[age] => 19
)
[2] => Array
(
[name] => Bob
[age] => 18
)
)
五、按鍵名排序
有時候需要按照數組的鍵名進行排序,可以使用krsort()函數對數組鍵名進行逆向排序,ksort()函數對數組鍵名進行正向排序。
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
print_r($fruits);
krsort($fruits);
print_r($fruits);
以上代碼輸出結果為:
Array
(
[a] => orange
[b] => banana
[c] => apple
[d] => lemon
)
Array
(
[d] => lemon
[c] => apple
[b] => banana
[a] => orange
)
六、按值排序
按照數組的值進行排序,可以使用sort()函數對數組值進行正向排序,rsort()函數對數組值進行逆向排序。
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
print_r($fruits);
rsort($fruits);
print_r($fruits);
以上代碼輸出結果為:
Array
(
[0] => apple
[1] => banana
[2] => lemon
[3] => orange
)
Array
(
[0] => orange
[1] => lemon
[2] => banana
[3] => apple
)
以上就是PHP數組排序的指南,無論是基礎排序還是多維數組排序,通過PHP內置函數都能夠輕鬆實現。選擇不同的排序演算法和方法,根據實際情況選擇最適合的排序方式,能夠有效提高我們的程序效率。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/241056.html
微信掃一掃
支付寶掃一掃