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

PHP 陣列排序完整指南:sort、rsort、range 快速建立與多維排序實戰

     編輯:PHP 相關知識

快速建立陣列:range()

range() 是建立連續數值/字元陣列的最高效方式。

數值陣列

<?php
$numbers = range(1, 9);      // [1,2,3,4,5,6,7,8,9]
$desc = range(9, 1);         // [9,8,7,6,5,4,3,2,1]
$step = range(1, 9, 3);      // [1,4,7] (第三參數:步長)
?>

字元陣列 (注意大小寫)

<?php
$lower = range('a', 'z');    // a-z
$upper = range('A', 'Z');    // A-Z
$mixed = range('A', 'z');    // A-Z + [\]^_` + a-z (ASCII 連續)
?>

升序排序:sort()

重新索引 (數值鍵從 0 開始),**區分大小寫** (大寫字母 ASCII 較小,排在前面)。

<?php
$people = ['name', 'sex', 'nation', 'birth'];
sort($people);
// 結果:birth, name, nation, sex

$nums = ['26', '3'];
sort($nums, SORT_STRING);   // 字串比較:'26' < '3' → [26, 3]
sort($nums, SORT_NUMERIC);  // 數值比較:3 < 26 → [3, 26]
?>

sort() 旗標常數

旗標行為
SORT_REGULAR預設,一般比較 (不轉型)
SORT_NUMERIC數值比較
SORT_STRING字串比較
SORT_LOCALE_STRING依當前 locale 字串比較
SORT_NATURAL自然排序 (PHP 5.4+)
SORT_FLAG_CASE不分大小寫 (搭配 SORT_STRING)

降序排序:rsort()

<?php
$nums = range(1, 9);
rsort($nums);  // [9,8,7,6,5,4,3,2,1]
// 等同於 range(9, 1)
?>

關聯陣列排序:保留鍵值關係

函式排序依據鍵值保留
asort()值升序✅
arsort()值降序✅
ksort()鍵升序✅
krsort()鍵降序✅
<?php
$fruits = ['c' => 'cherry', 'a' => 'apple', 'b' => 'banana'];
asort($fruits);   // a=>apple, b=>banana, c=>cherry
ksort($fruits);   // a=>apple, b=>banana, c=>cherry
?>

多維陣列/物件排序:usort() + 自訂比較

<?php
$users = [
    ['name' => '王五', 'age' => 25],
    ['name' => '李四', 'age' => 30],
    ['name' => '張三', 'age' => 20],
];

// 年齡升序
usort($users, function($a, $b) {
    return $a['age'] - $b['age'];
});

// PHP 7+ 太空船運算子 (更優雅)
usort($users, fn($a, $b) => $a['age'] <=> $b['age']);

// 多欄位排序:年齡升序,同齡則名稱降序
usort($users, function($a, $b) {
    $ageDiff = $a['age'] <=> $b['age'];
    return $ageDiff !== 0 ? $ageDiff : $b['name'] <=> $a['name'];
});
?>

陣列排序函式完整對照表

函式排序方向依據保留鍵重新索引
sort升序值❌✅
rsort降序值❌✅
asort升序值✅❌
arsort降序值✅❌
ksort升序鍵✅❌
krsort降序鍵✅❌
usort自訂值❌✅
uasort自訂值✅❌
uksort自訂鍵✅❌
natsort自然序值✅❌
natcasesort自然序不分大小寫值✅❌

效能與實務建議

  • 大量資料排序:sort() 等內建函式為 C 實作,極快
  • 避免在迴圈中重複排序,先收集資料再一次排序
  • 多欄位排序用 usort + 太空船運算子 <=> (PHP 7+)
  • 自然排序處理檔名/版本號:natsort() (如 file1, file2, file10 正確順序)
  • 需保留關聯鍵務必用 asort/ksort/uasort/uksort

總結

PHP 陣列排序函式族群完整且強大。核心選擇邏輯:**看「依據值/鍵」、「升/降序」、「是否保留鍵」三個維度對號入座**。善用 range() 快速建立測試資料,複雜排序靠 usort + 閉包/箭頭函式 靈活應對。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved