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 連續)
?>
重新索引 (數值鍵從 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_REGULAR | 預設,一般比較 (不轉型) |
SORT_NUMERIC | 數值比較 |
SORT_STRING | 字串比較 |
SORT_LOCALE_STRING | 依當前 locale 字串比較 |
SORT_NATURAL | 自然排序 (PHP 5.4+) |
SORT_FLAG_CASE | 不分大小寫 (搭配 SORT_STRING) |
<?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
?>
<?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/uksortPHP 陣列排序函式族群完整且強大。核心選擇邏輯:**看「依據值/鍵」、「升/降序」、「是否保留鍵」三個維度對號入座**。善用 range() 快速建立測試資料,複雜排序靠 usort + 閉包/箭頭函式 靈活應對。