PHP 提供豐富的陣列排序函數,依索引/關聯陣列、升序/降序、按值/按鍵、隨機/反轉 等需求選用。
1. 快速建立陣列:range()
$nums = range(1, 9); // [1,2,3,4,5,6,7,8,9]
$nums = range(9, 1); // [9,8,7,6,5,4,3,2,1]
$nums = range(1, 9, 2); // 步長 2:[1,3,5,7,9]
$letters = range('a', 'z'); // ['a','b',...,'z']
2. 索引陣列排序
| 函數 | 說明 | 鍵名保留 |
sort() | 升序(值) | ❌ 重新索引 0..n |
rsort() | 降序(值) | ❌ |
sort($arr, SORT_NUMERIC) | 數值升序 | ❌ |
sort($arr, SORT_STRING) | 字串升序 | ❌ |
$arr = ['26', '3'];
sort($arr, SORT_NUMERIC); // ['3', '26']
sort($arr, SORT_STRING); // ['26', '3'] (字典序)
3. 關聯陣列排序(保留鍵名)
| 函數 | 排序依據 | 順序 |
asort() | 值 | 升序 |
arsort() | 值 | 降序 |
ksort() | 鍵 | 升序 |
krsort() | 鍵 | 降序 |
$arr = ['xm'=>'name', 'xb'=>'sex', 'mz'=>'nation', 'cs'=>'birth'];
asort($arr); // 按值升序:birth, name, nation, sex
ksort($arr); // 按鍵升序:cs, mz, xb, xm
4. 隨機打亂:shuffle()
$arr = ['a','b','c','d'];
shuffle($arr); // 每次順序不同,鍵名重新索引
5. 反轉順序:array_reverse()
$arr = ['a','b','c','d'];
$rev = array_reverse($arr); // ['d','c','b','a']
// 原陣列不變,回傳新陣列
6. 記憶口訣
- 基礎:
sort(值升序)
- 關聯陣列前綴:
a (asort/arsort = 值)、k (ksort/krsort = 鍵)
- 降序前綴:
r (rsort/arsort/krsort)
7. 進階:使用者自訂排序
// 依長度排序
usort($arr, function($a, $b) {
return strlen($a) - strlen($b);
});
// 關聯陣列保留鍵名自訂排序
uasort($arr, function($a, $b) {
return $a - $b;
});
// 依鍵名自訂排序
uksort($arr, function($a, $b) {
return strcmp($a, $b);
});