您当前的位置:首页 > 计算机 > 编程开发 > PHP

在PHP中对多维数组进行排序

时间:11-17来源:作者:点击数:

在PHP中对多维数组进行排序可以使用多种方法,以下是最常见的几种解决方案:


方法1:使用 usort() 自定义比较函数(按键值排序)

适用于根据数组中某个特定键的值进行排序,支持复杂逻辑。

// 示例数据
$users = [
    ['name' => 'Alice', 'age' => 25],
    ['name' => 'Bob', 'age' => 30],
    ['name' => 'Charlie', 'age' => 20]
];

// 按 'age' 升序排序
usort($users, function ($a, $b) {
    return $a['age'] <=> $b['age']; // PHP 7+ 太空船操作符简化比较
});

// 降序排序示例
usort($users, function ($a, $b) {
    return $b['age'] <=> $a['age'];
});

方法2:使用 array_multisort()(多键排序或简单排序)

适用于需要根据多个键排序或直接提取列排序的情况。

// 示例数据
$users = [
    ['name' => 'Alice', 'age' => 25, 'city' => 'New York'],
    ['name' => 'Bob', 'age' => 30, 'city' => 'London'],
    ['name' => 'Charlie', 'age' => 20, 'city' => 'Paris']
];

// 提取排序依据的列
$ages = array_column($users, 'age');
$cities = array_column($users, 'city');

// 先按城市升序,再按年龄降序排序
array_multisort(
    $cities, SORT_ASC,          // 第一排序键
    $ages, SORT_DESC,           // 第二排序键
    $users                      // 待排序的主数组
);

方法3:使用 uasort() 保留键关联

如果数组是关联数组(如键名为ID),需要保留键名时使用:

$users = [
    'u1' => ['name' => 'Alice', 'age' => 25],
    'u2' => ['name' => 'Bob', 'age' => 30],
    'u3' => ['name' => 'Charlie', 'age' => 20]
];

uasort($users, function ($a, $b) {
    return $a['age'] <=> $b['age'];
});

多字段排序示例

若需先按城市排序,城市相同再按年龄排序:

usort($users, function ($a, $b) {
    // 先比较城市
    $cityCompare = strcmp($a['city'], $b['city']);
    if ($cityCompare !== 0) {
        return $cityCompare;
    }
    // 城市相同则比较年龄
    return $a['age'] <=> $b['age'];
});

说明
  • usort():直接修改原数组,不保留键名(适合索引数组)。
  • uasort():保留原键名(适合关联数组)。
  • array_multisort():适合多键排序,但需预先提取排序键的数组。
  • PHP版本:确保使用 PHP 5.5+(array_column)或更高版本,PHP 7+ 的太空船操作符(<=>)可简化比较逻辑。

根据具体需求选择合适的方法,如需保留键或处理复杂排序逻辑,可灵活组合上述函数。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐