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

PHP 多維陣列指定欄位排序的通用函式

     編輯:PHP 綜合知識

需求背景

PHP 內建 array_multisort() 功能強大,但直接對多維陣列的特定欄位排序時,寫法較繁瑣。本文封裝一個通用函式,讓您以單行程式碼完成「依指定欄位排序多維陣列」的需求。

核心函式實作

<?php
/**
 * 依指定欄位對多維陣列進行排序
 * 
 * @param array &$array 目標陣列(參考傳遞,直接修改原陣列)
 * @param string $field 排序依據的欄位名稱
 * @param bool $desc 是否降序排列(預設 false 為升序)
 * @return void
 */
function sortArrByField(&$array, $field, $desc = false) {
    // 1. 提取排序欄位值建立索引陣列
    $fieldValues = array();
    foreach ($array as $key => $row) {
        $fieldValues[$key] = $row[$field];
    }
    
    // 2. 確定排序方向
    $sortOrder = $desc ? SORT_DESC : SORT_ASC;
    
    // 3. 執行多重排序(索引陣列優先,原陣列跟隨)
    array_multisort($fieldValues, $sortOrder, $array);
}
?>

使用範例

<?php
// 範例資料:使用者清單
$users = [
    ['id' => 3, 'name' => '小王', 'age' => 25, 'score' => 85],
    ['id' => 1, 'name' => '小李', 'age' => 30, 'score' => 92],
    ['id' => 2, 'name' => '小張', 'age' => 22, 'score' => 78],
    ['id' => 4, 'name' => '小陳', 'age' => 28, 'score' => 88],
];

echo "原始順序:\n";
print_r($users);

// 依年齡升序排序
sortArrByField($users, 'age');
echo "\n依年齡升序:\n";
print_r($users);

// 依分數降序排序
sortArrByField($users, 'score', true);
echo "\n依分數降序:\n";
print_r($users);
?>

執行結果

依年齡升序:
Array
(
    [0] => Array ( [id] => 2 [name] => 小張 [age] => 22 [score] => 78 )
    [1] => Array ( [id] => 3 [name] => 小王 [age] => 25 [score] => 85 )
    [2] => Array ( [id] => 4 [name] => 小陳 [age] => 28 [score] => 88 )
    [3] => Array ( [id] => 1 [name] => 小李 [age] => 30 [score] => 92 )
)

依分數降序:
Array
(
    [0] => Array ( [id] => 1 [name] => 小李 [age] => 30 [score] => 92 )
    [1] => Array ( [id] => 4 [name] => 小陳 [age] => 28 [score] => 88 )
    [2] => Array ( [id] => 3 [name] => 小王 [age] => 25 [score] => 85 )
    [3] => Array ( [id] => 2 [name] => 小張 [age] => 22 [score] => 78 )
)

進階擴展:多欄位排序

若需支援「先按欄位 A 排序,相同則按欄位 B 排序」,可擴充函式:

<?php
function sortArrByFields(&$array, array $fields) {
    $sortArrays = [];
    foreach ($fields as $field => $order) {
        $values = array_column($array, $field);
        $sortArrays[] = $values;
        $sortArrays[] = $order;
    }
    $sortArrays[] = &$array; // 最後加入原陣列參考
    call_user_func_array('array_multisort', $sortArrays);
}

// 使用範例:先按 age 升序,再按 score 降序
sortArrByFields($users, ['age' => SORT_ASC, 'score' => SORT_DESC]);
?>

效能與適用性說明

  • 時間複雜度: O(n log n),取決於 array_multisort 內部實作
  • 記憶體: 需額外建立索引陣列,大型資料集(>10萬筆)建議改用資料庫 ORDER BY
  • 適用場景: API 回傳資料排序、快取資料重組、小型報表生成

這個函式簡潔、無依賴、相容 PHP 5.3+,是處理多維陣列排序的實用工具函式。

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