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

PHP 二維數組多字段排序:array_multisort 實戰詳解

     編輯:PHP 綜合知識

需求背景

從不同表獲取數據合併後(array_merge),需按 create_time 降序取前 4 條。無法在 SQL 層面 ORDER BY,必須在 PHP 層排序。

核心代碼

<?php
$users = [
    ['id' => 1, 'name' => '張三', 'age' => 25],
    ['id' => 2, 'name' => '李四', 'age' => 23],
    ['id' => 3, 'name' => '王五', 'age' => 40],
    ['id' => 4, 'name' => '趙六', 'age' => 31],
    ['id' => 5, 'name' => '黃七', 'age' => 20],
];

// 排序配置:支持多字段、混合升降序
$sort = [
    'field'     => 'age',       // 排序字段
    'direction' => 'SORT_DESC', // SORT_ASC 升序,SORT_DESC 降序
];

// 1. 提取排序列
$sortCol = [];
foreach ($users as $key => $row) {
    $sortCol[$key] = $row[$sort['field']];
}

// 2. 執行排序(引用原數組)
array_multisort($sortCol, constant($sort['direction']), $users);

// 結果:age 20, 23, 25, 31, 40
var_dump($users);

進階:多字段混合排序

如先按 age DESC,同年齡再按 name ASC:

$age  = array_column($users, 'age');
$name = array_column($users, 'name');
array_multisort($age, SORT_DESC, $name, SORT_ASC, $users);

關鍵點解析

  • array_multisort() 接受多個「排序列數組」+「排序標志」對,最後一個參數為引用的原數組。
  • 排序列數組的鍵必須與原數組一致(0,1,2...),否則會導致關聯丟失。
  • constant('SORT_DESC') 將字符串轉為常量,便於配置化存儲。

替代方案:usort() 閉包寫法(PHP 5.3+)

usort($users, function ($a, $b) {
    // 年齡降序
    if ($a['age'] !== $b['age']) return $b['age'] - $a['age'];
    // 姓名升序
    return strcmp($a['name'], $b['name']);
});

對比:usort 邏輯更靈活(可做複雜比較),但大數據量下 array_multisort 速度更快(C 層批量排序)。

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