| 函數 | 排序依據 | 是否保留鍵值關聯 | 順序 | 適用陣列類型 |
|---|---|---|---|---|
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));
PHP 7+ 推薦使用 太空船運算子 <=> 自動處理。
sort() 會摧毀關聯鍵:若需保留鍵,請用 asort()/ksort()。bool,不是 回傳新陣列。$new = sort($arr); // 錯誤!$new 是 true/false'10' vs 整數 10 會被轉型,建議先統一型別。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)