首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 陣列排序函數大比拚:sort、asort、ksort、rsort、arsort、krsort 差異總整理

     編輯:PHP 相關知識

六大核心函數對照表

函數排序依據是否保留鍵值關聯順序適用陣列類型
sort()值否 (重建 0..N 索引)升序索引陣列
rsort()值否降序索引陣列
asort()值是升序關聯/索引皆可
arsort()值是降序關聯/索引皆可
ksort()鍵是升序關聯/索引皆可
krsort()鍵否 (註:保留鍵,但順序反轉)降序關聯/索引皆可

實戰範例

<?php
$arr = ['d' => 'delta', 'a' => 'alpha', 'e' => 'epsilon', 'b' => 'beta'];

echo "原始: "; print_r($arr);

sort($arr);   // ['alpha','beta','delta','epsilon'] 索引 0,1,2,3
asort($arr);  // ['a'=>'alpha','b'=>'beta','d'=>'delta','e'=>'epsilon'] 保留鍵
ksort($arr);  // ['a'=>'alpha','b'=>'beta','d'=>'delta','e'=>'epsilon'] 按鍵排序

進階:自定義比較 usort、uasort、uksort

<?php
$people = [
    ['name' => 'John', 'age' => 25],
    ['name' => 'Jane', 'age' => 20],
    ['name' => 'Bob',  'age' => 30],
];

// 依年齡升序 (值排序,重建索引)
usort($people, fn($a, $b) => $a['age'] <=> $b['age']);

// 依年齡升序 (保留鍵)
uasort($people, fn($a, $b) => $a['age'] <=> $b['age']);

// 依名稱長度排序鍵 (鍵排序)
uksort($people, fn($a, $b) => strlen($a) <=> strlen($b));

比較函數回傳值規範

  • 負數:$a < $b ( $a 排前面 )
  • 0:相等
  • 正數:$a > $b ( $b 排前面 )

PHP 7+ 推薦使用 太空船運算子 <=> 自動處理。

常見陷阱

  1. sort() 會摧毀關聯鍵:若需保留鍵,請用 asort()/ksort()。
  2. 參考傳遞:所有排序函數皆修改原陣列並回傳 bool,不是 回傳新陣列。
    $new = sort($arr); // 錯誤!$new 是 true/false
  3. 混合型別比較:數字字串 '10' vs 整數 10 會被轉型,建議先統一型別。
  4. SORT_NATURAL、SORT_FLAG_CASE 旗標可用於 sort($arr, SORT_NATURAL | SORT_FLAG_CASE) 自然排序。

多維陣列多欄位排序:array_multisort()

<?php
$data = [
    ['name' => 'A', 'age' => 20, 'score' => 90],
    ['name' => 'B', 'age' => 20, 'score' => 85],
    ['name' => 'C', 'age' => 25, 'score' => 90],
];

// 先按 age 升序,再按 score 降序
$age   = array_column($data, 'age');
$score = array_column($data, 'score');
array_multisort($age, SORT_ASC, $score, SORT_DESC, $data);
// 結果:B(20,85), A(20,90), C(25,90)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved