You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中按数组第3个字段从大到小排序(无命名键)

解决PHP二维无键数组按指定字段降序排序的问题

没问题,要实现这个二维无键数组按每个子项的第三个字段(索引为2的元素)从大到小排序,用PHP的内置函数就能轻松搞定,我给你两种实用的实现方案:

方案一:使用usort()自定义排序逻辑

usort()可以让我们自定义数组的排序规则,PHP7及以上版本用太空船运算符(<=>)能简洁又安全地处理数值比较:

// 你的原二维数组
$countries = [
    ['Argentina', 'AR', 20.1],
    ['Austria', 'AT', 20.1],
    ['Australia', 'AU', 20.1],
    ['Azerbaijan', 'AZ', 20.1],
    ['Bosnia and Herzegovina', 'BA', 20.1],
    ['Barbados', 'BB', 20.1],
    // 其他省略的元素...
];

// PHP 7.4+ 箭头函数写法(更简洁)
usort($countries, fn($a, $b) => $b[2] <=> $a[2]);

// 或者兼容PHP7.0-7.3的匿名函数写法
// usort($countries, function($a, $b) {
//     return $b[2] <=> $a[2];
// });

// 输出排序后的数组
print_r($countries);

如果你的PHP版本低于7.0,可以用传统的条件比较写法:

usort($countries, function($a, $b) {
    if ($a[2] === $b[2]) {
        return 0;
    }
    // 降序排序,所以当$a[2]小于$b[2]时返回1,反之返回-1
    return $a[2] < $b[2] ? 1 : -1;
});

方案二:使用array_multisort()按列排序

如果你觉得自定义回调有点麻烦,array_multisort()是更直观的按列排序方案——先提取所有子数组的第三个字段值,再以此为依据对原数组排序:

// 提取所有子数组的第三个元素(索引2)作为排序基准
$sortKeys = array_column($countries, 2);

// 按$sortKeys降序,同步对原数组$countries排序
array_multisort($sortKeys, SORT_DESC, $countries);

// 输出结果
print_r($countries);

补充说明

  • 两种方案都能实现降序排序,如果要改成升序,只需要把$b[2] <=> $a[2]换成$a[2] <=> $b[2],或者把SORT_DESC改成SORT_ASC即可。
  • 对于值相同的元素(比如示例里的20.1),usort()属于不稳定排序,原数组的相对顺序可能会改变;如果需要保留原顺序,array_multisort()在值相同时会默认保留原数组的元素顺序。

内容的提问来源于stack exchange,提问作者Mike Dray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:22:28