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

PHP 陣列排序函數大全:sort/rsort、ksort/krsort、asort/arsort、natsort、usort、array_multisort 實戰詳解

     編輯:PHP 綜合知識

基本排序:值排序

函數順序鍵名保留範例
sort()升序❌ 重新索引 0..n[5,8,1,7,2] → [1,2,5,7,8]
rsort()降序❌ 重新索引[5,8,1,7,2] → [8,7,5,2,1]

關鍵字排序:保留鍵值關聯

函數依據順序範例 (鍵→值)
ksort()Key升序['US'=>'US','IN'=>'India','DE'=>'DE'] → DE,ES,IN,US
krsort()Key降序反向
asort()Value升序依值字母序,鍵跟著動
arsort()Value降序反向

自然語言排序

<?php
$data = ['book-1', 'book-10', 'book-100', 'book-5'];
sort($data);      // ['book-1','book-10','book-100','book-5']  字典序
natsort($data);   // ['book-1','book-5','book-10','book-100']  人類直覺序
// 降序自然排序
$nat = $data; natsort($nat); $nat = array_reverse($nat, true);
// ['book-100','book-10','book-5','book-1']
?>

自定義比較:usort / uasort / uksort

<?php
// 依字串長度排序 (短→長)
$data = ['joe@host.com', 'john.doe@gh.co.uk', 'asmithsonian@us.info', 'jay@zoo.tw'];
usort($data, function($a, $b) {
    return strlen($a) <=> strlen($b); // PHP 7+ 太空船運算子
});
// ['jay@zoo.tw', 'joe@host.com', 'john.doe@gh.co.uk', 'asmithsonian@us.info']

// 保留鍵名的自定義排序
uasort($arr, 'cmp_func'); // 依值
uksort($arr, 'cmp_func'); // 依鍵
?>

多維陣列 / 多欄位排序:array_multisort

<?php
$data = [
    ['id'=>1, 'name'=>'Boney M',    'rating'=>3],
    ['id'=>2, 'name'=>'Take That',  'rating'=>1],
    ['id'=>3, 'name'=>'The Killers','rating'=>4],
    ['id'=>4, 'name'=>'Lusain',     'rating'=>3],
];

// 先按 rating 升序,rating 相同再按 name 升序
$rating = array_column($data, 'rating');
$name   = array_column($data, 'name');
array_multisort($rating, SORT_ASC, $name, SORT_ASC, $data);

/* 結果:
  Take That (1)
  Boney M   (3)  ← name 排序
  Lusain    (3)
  The Killers (4)
*/
?>

排序旗標常用組合

旗標說明
SORT_REGULAR一般比較 (預設)
SORT_NUMERIC數值比較
SORT_STRING字串比較
SORT_LOCALE_STRING依當前 locale 字串比較
SORT_NATURAL自然排序 (PHP 5.4+)
SORT_FLAG_CASE不區分大小寫 (搭配 SORT_STRING)

效能提示

  • 大量資料排序 → 盡在 SQL ORDER BY 完成
  • PHP 端排序前先 array_column 提取欄位,避免重複存取
  • 穩定排序需求 (PHP 8.0+ sort 已穩定) 注意版本差異
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved