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

PHP 陣列排序大全:內建函式、多維排序與自訂比較

     編輯:PHP 相關知識

前言

PHP 提供豐富的陣列排序函式,依「依值/鍵排序」、「升冪/降冪」、「是否保留鍵名關聯」分類。本文整理所有常用函式,並示範多維陣列與自訂比較函式(usort)的進階用法。

基本排序函式對照表

函式排序依據順序保留鍵名關聯
sort值升冪否(重建 0..n)
rsort值降冪否
asort值升冪是
arsort值降冪是
ksort鍵升冪是
krsort鍵降冪是

範例:依鍵名降冪

$lang = ['c'=>'php', 'd'=>'asp', 'a'=>'jsp', 'b'=>'java'];
krsort($lang);
foreach ($lang as $k=>$v) echo "$k = $v
"; // 輸出:d=asp, c=php, b=java, a=jsp

array_multisort:多陣列或多維陣列同步排序

多個一維陣列

$ar1 = ["10", 100, 100, "a"];
$ar2 = [1, 3, "2", 1];
array_multisort($ar1, $ar2);
// $ar1: ["10", "a", 100, 100]
// $ar2: [1, 1, "2", 3]  // 對應 $ar1 中相同值的項目順序

多維陣列指定欄位排序

$data = [
    ['name'=>'A', 'score'=>80],
    ['name'=>'B', 'score'=>90],
    ['name'=>'C', 'score'=>70]
];
// 依 score 降冪
array_multisort(array_column($data, 'score'), SORT_DESC, $data);
print_r($data);

usort:自訂比較函式(最靈活)

當排序邏輯複雜(如多欄位、物件屬性),使用 usort:

$arr = [
    ['score'=>60], ['score'=>70], ['score'=>80],
    ['score'=>90], ['score'=>20], ['score'=>10],
    ['score'=>50], ['score'=>30]
];

usort($arr, function($a, $b) {
    return $a['score'] <=> $b['score']; // PHP 7+ 太空船運算子
    // 舊版:return $a['score'] - $b['score'];
});
// 結果:10,20,30,50,60,70,80,90(升冪)

降冪寫法

usort($arr, function($a, $b) {
    return $b['score'] <=> $a['score'];
});

進階:多鍵值排序(如先按年齡升冪,再按分數降冪)

usort($users, function($a, $b) {
    if ($a['age'] !== $b['age']) return $a['age'] <=> $b['age'];
    return $b['score'] <=> $a['score'];
});

效能提示

  • 內建函式(sort 系列)以 C 實作,速度最快。
  • usort 需呼叫 PHP 回呼函式,資料量超過萬筆時較慢,可考慮先用 array_multisort 配合 array_column。
  • 排序前若不需要原鍵名,用 sort/rsort 可節省記憶體。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved