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

PHP 二維陣列依指定鍵值排序通用函數

     編輯:PHP 相關知識

應用場景

在處理資料庫查詢結果、API 回傳資料或 CSV 匯入資料時,經常獲得二維陣列(陣列的陣列)。PHP 內建排序函數(sort()、asort() 等)僅支援一維陣列,若需依特定欄位(如價格、日期、名稱)對二維陣列排序,需自行實作。

通用排序函數

<?php
/**
 * 二維陣列依指定鍵值排序
 *
 * @param array  $arr   待排序的二維陣列
 * @param string $keys  依此鍵值排序
 * @param string $type  排序方向:'asc' 升序(預設)、'desc' 降序
 * @return array 排序後的陣列
 */
function array_sort($arr, $keys, $type = 'asc') {
    $keysValue = [];
    $newArray  = [];

    // 1. 提取排序鍵值對應的索引
    foreach ($arr as $k => $v) {
        $keysValue[$k] = $v[$keys];
    }

    // 2. 對鍵值陣列排序,保持索引關聯
    if ($type === 'asc') {
        asort($keysValue);
    } else {
        arsort($keysValue);
    }

    // 3. 依排序後的索引重組原陣列
    reset($keysValue);
    foreach ($keysValue as $k => $v) {
        $newArray[$k] = $arr[$k];
    }

    return $newArray;
}
?>

使用範例

<?php
$products = [
    ['id' => 1, 'name' => '筆電', 'price' => 25000],
    ['id' => 2, 'name' => '滑鼠', 'price' => 500],
    ['id' => 3, 'name' => '螢幕', 'price' => 8000],
    ['id' => 4, 'name' => '鍵盤', 'price' => 1200],
];

// 價格升序
$sortedAsc = array_sort($products, 'price', 'asc');
print_r($sortedAsc);

/* 輸出:
Array
(
    [1] => Array ( [id] => 2 [name] => 滑鼠 [price] => 500 )
    [3] => Array ( [id] => 4 [name] => 鍵盤 [price] => 1200 )
    [2] => Array ( [id] => 3 [name] => 螢幕 [price] => 8000 )
    [0] => Array ( [id] => 1 [name] => 筆電 [price] => 25000 )
)
*/

// 價格降序
$sortedDesc = array_sort($products, 'price', 'desc');
print_r($sortedDesc);
?>

進階替代方案:array_multisort() 或 usort()

PHP 5.5+ 可使用更簡潔的 array_column() 搭配 array_multisort():

<?php
// 價格升序
array_multisort(array_column($products, 'price'), SORT_ASC, $products);

// 多欄位排序:先依價格升序,再依名稱降序
array_multisort(
    array_column($products, 'price'), SORT_ASC,
    array_column($products, 'name'), SORT_DESC,
    $products
);
?>

或使用 usort() 自訂比較函數(支援複雜邏輯):

<?php
usort($products, function($a, $b) {
    return $a['price'] <=> $b['price']; // 太空船運算子 PHP 7+
});
?>

效能與選擇建議

方法適用版本優點缺點
array_sort() 自訂函數PHP 4+邏輯清晰、相容舊版本需額外迴圈、效能稍遜
array_multisort()PHP 4+內建函數、支援多鍵排序語法較繁瑣、需提取欄位陣列
usort() + 閉包PHP 5.3+彈性最高、支援複雜比較大量資料時呼叫開銷較大

總結

針對簡單的單一欄位排序,array_sort() 函數提供直觀易懂的封裝;現代專案建議優先使用 array_multisort() 或 usort(),程式碼更簡潔且效能更佳。根據 PHP 版本與專案複雜度選擇最適合的方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved