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

PHP 陣列排序入門:sort、asort、ksort 與多維陣列排序策略

     編輯:PHP 綜合知識

PHP 陣列排序函數家族完整圖譜:從一維到多維的實戰選型指南

PHP 提供了豐富的陣列排序函數,依據「是否保留鍵值關聯」、「索引類型」、「排序依據(鍵/值)」可分為數個家族。本文系統梳理 sort、asort、ksort 等核心函數用法,並闡述多維陣列排序的核心難點與解決路徑。

一、數字索引陣列初建立與基礎排序

<?php
$arr = array('100', '200', '300'); // 索引 0,1,2
$nums = range(1, 10);             // 1..10
$nums = range(1, 10, 2);          // 1,3,5,7,9 步長 2
?>

二、核心排序函數對照表

函數排序依據保留鍵值關聯順序備註
sort()值否(重建 0..n 索引)升序區分大小寫,大寫在前
rsort()值否降序sort 反向
asort()值是升序關聯陣列首選
arsort()值是降序asort 反向
ksort()鍵是升序按鍵名排序
krsort()鍵是降序ksort 反向

三、關聯陣列排序實戰

<?php
$price = array('蘋果'=>5, '香蕉'=>6, '荔枝'=>7);
ksort($price);  // 按鍵名:荔枝, 蘋果, 香蕉 (Unicode 碼位順序)
asort($price);  // 按值:蘋果 5, 香蕉 6, 荔枝 7
?>

第二參數旗標:SORT_NUMERIC(數值比較)、SORT_STRING(字串比較)、SORT_REGULAR(預設)。
例:sort($arr, SORT_NUMERIC) 確保 "12" > "2"。

四、多維陣列排序:核心難點與解法

難點:PHP 不知道如何比較兩個陣列(陣列元素本身是陣列),需提供比較邏輯。
解法三選一:

  1. array_multisort:提取排序欄位建立輔助陣列,參見前文範例 3。
  2. usort + 自訂比較函數(推薦,彈性最高):
<?php
$data = array(
    array('name'=>'A', 'age'=>20),
    array('name'=>'B', 'age'=>18),
    array('name'=>'C', 'age'=>25)
);
usort($data, function($a, $b) {
    return $a['age'] - $b['age']; // 年齡升序
});
// PHP 7+ 可用太空船運算子:return $a['age'] <=> $b['age'];
?>
  1. array_column + array_multisort(PHP 5.5+,語法最簡潔):
<?php
$ages = array_column($data, 'age');
array_multisort($ages, SORT_ASC, $data);
?>

五、選型建議速查表

  • 一維數字索引陣列,不需保留索引 → sort() / rsort()
  • 一維關聯陣列,按值排序保留鍵 → asort() / arsort()
  • 一維關聯陣列,按鍵排序 → ksort() / krsort()
  • 多維陣列/資料庫結果集,單欄或多欄複合排序 → array_multisort 或 usort
  • 需複雜比較邏輯(多欄位、自訂規則、物件屬性) → usort + 匿名函數

六、常見坑點提醒

  • sort() 會重置數字索引,關聯鍵名會丟失。
  • 字串比較時 "10" < "2"(字典序),數值比較須加 SORT_NUMERIC。
  • 大小寫敏感:'A' < 'a',不分大小寫需自行轉換或用 strcasecmp 搭配 usort。
  • 排序函數皆返回 bool,排序結果直接修改原陣列,勿寫成 $arr = sort($arr)(會變成 true)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved