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

PHP 陣列排序函式大全:分類、關鍵字命名規則與多維排序實戰

     編輯:PHP 綜合知識

PHP 提供豐富的陣列排序函式,命名規則其實暗藏玄機。掌握 a (association)、k (key)、r (reverse)、u (user-defined) 四個關鍵字後綴,即可輕鬆記憶 10 種核心排序函式的行為差異。本文系統整理並附上多維陣列排序實戰範例。

核心命名規則速查表

後綴含義行為
aAssociation依值排序,保持鍵值關聯
kKey依鍵名排序
rReverse反向(降序)
uUser-defined使用自訂比較函式

組合範例:asort = a(關聯) + sort(升序);krsort = k(鍵名) + r(反向) + sort(排序)。

11 種核心排序函式完整對照

基本排序(重設數字索引,不保留鍵名)

$fruits = ["lemon", "orange", "banana", "apple"];
sort($fruits);   // 升序:apple, banana, lemon, orange
rsort($fruits);  // 降序:orange, lemon, banana, apple

關聯排序(保留鍵名)

$fruits = ["d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"];
asort($fruits);   // 依值升序:c=>apple, b=>banana, d=>lemon, a=>orange
arsort($fruits);  // 依值降序:a=>orange, d=>lemon, b=>banana, c=>apple

鍵名排序

ksort($fruits);   // 依鍵升序:a=>orange, b=>banana, c=>apple, d=>lemon
krsort($fruits);  // 依鍵降序:d=>lemon, c=>apple, b=>banana, a=>orange

自訂比較函式排序

// usort:依值排序,不保留鍵名
usort($arr, function($a, $b) { return $a <=> $b; }); // PHP 7+ 太空船運算子

// uasort:依值排序,保留鍵名
uasort($arr, function($a, $b) { return $a <=> $b; });

// uksort:依鍵名排序,保留鍵名
uksort($arr, function($a, $b) { return strcasecmp($a, $b); });

多重排序:array_multisort()

$ar = [
    ["10", 11, 100, 100, "a"],
    [1, 2, "2", 3, 1]
];
// 優先按 $ar[0] 字串升序,次按 $ar[1] 數值降序
array_multisort($ar[0], SORT_ASC, SORT_STRING,
                $ar[1], SORT_NUMERIC, SORT_DESC);

實戰:二維陣列依指定欄位排序

常見需求:商品列表依價格、銷量等欄位排序。封裝通用函式:

/**
 * 二維陣列依指定鍵值排序
 * @param array  $arr   待排序陣列
 * @param string $key   排序依據的鍵名
 * @param string $order 'asc' 或 'desc'
 * @return array
 */
function array_sort(array $arr, string $key, string $order = 'asc'): array
{
    $keys = array_column($arr, $key); // PHP 5.5+ 取得單欄陣列
    $order === 'asc' ? asort($keys) : arsort($keys);
    $result = [];
    foreach ($keys as $k => $v) {
        $result[$k] = $arr[$k];
    }
    return $result;
}

// 使用範例
$products = [
    ['name'=>'手機', 'brand'=>'諾基亞', 'price'=>1050],
    ['name'=>'筆電', 'brand'=>'Lenovo', 'price'=>4300],
    ['name'=>'剃鬚刀', 'brand'=>'飛利浦', 'price'=>3100],
];
$sorted = array_sort($products, 'price', 'asc');
// 結果:手機(1050) → 剃鬚刀(3100) → 筆電(4300)

常見陷阱提醒

  • 所有核心排序函式皆為「就地修改」,回傳 bool 而非新陣列:sort($arr) 而非 $arr = sort($arr)。
  • array_multisort() 接受多組「陣列 + 排序旗標」組合,旗標順序對應前一個陣列參數。
  • 自訂比較函式回傳值:負數 = $a 在前、0 = 相等、正數 = $b 在前。PHP 7 起建議直接用 $a <=> $b。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved