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

PHP 二維陣列依指定鍵值排序:通用函數實作與使用範例

     編輯:PHP 綜合知識

通用排序函數

function array_sort(array $arr, string $key, string $type = 'asc') {
    $keyValues = [];
    foreach ($arr as $k => $v) {
        $keyValues[$k] = $v[$key] ?? null; // 鍵不存在視為 null
    }

    $type === 'asc' ? asort($keyValues) : arsort($keyValues);

    $sorted = [];
    foreach ($keyValues as $k => $v) {
        $sorted[] = $arr[$k];
    }
    return $sorted;
}

使用範例

$data = [
    ['name' => 'Js', 'date' => '2014-05-01'],
    ['name' => 'Sh', 'date' => '2014-04-30'],
    ['name' => 'Bj', 'date' => '2014-05-02'],
];

// 依 date 升序
$sorted = array_sort($data, 'date');
print_r($sorted);
/*
Array
(
    [0] => Array ( [name] => Sh [date] => 2014-04-30 )
    [1] => Array ( [name] => Js [date] => 2014-05-01 )
    [2] => Array ( [name] => Bj [date] => 2014-05-02 )
)
*/

// 依 name 降序
$sortedDesc = array_sort($data, 'name', 'desc');

進階:支援多鍵值排序

function array_multisort_custom(array $arr, array $criteria) {
    // $criteria = [['key'=>'date','order'=>'asc'], ['key'=>'name','order'=>'desc']]
    $sortArrays = [];
    foreach ($criteria as $c) {
        $vals = array_column($arr, $c['key']);
        $sortArrays[] = $vals;
        $sortArrays[] = $c['order'] === 'asc' ? SORT_ASC : SORT_DESC;
    }
    $sortArrays[] = &$arr; // 最後加入原陣列引用
    array_multisort(...$sortArrays);
    return $arr;
}

效能提示

  • 資料量 < 10,000 筆:上述函數足夠。
  • 大量資料:建議在 SQL 層完成 ORDER BY,減少記憶體與 CPU 開銷。
  • PHP 8.1+ 可用 array_is_list() 檢查索引連續性。

常見錯誤避坑

  1. 鍵名拼寫錯誤:$v[$key] 回傳 null 導致所有項目視為相同值,排序失效。建議加 ?? null 或拋出例外。
  2. 原始索引保留:函數回傳重新索引(0,1,2...)陣列,若需保留原鍵,改用 $sorted[$k] = $arr[$k];。
  3. 混合型別比較:字串與數字混排可能產生非預期順序,預先統一型別(如 strtotime() 轉時間戳)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved