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

如何按索引1对无键名PHP多维数组进行排序?

按子数组第二个元素排序的最佳方法

嘿,这个问题其实很好解决!在PHP里,我们可以用usort()函数配合自定义的比较逻辑,轻松实现按每个子数组的第二个元素排序。

基础升序排序(PHP7+推荐)

直接使用PHP7引入的太空船运算符(<=>),它能简洁地处理数值比较,返回我们需要的-1、0、1结果,完美适配usort()的要求:

$edibles = [ ['Apple', 250], ['Pear', 300], ['Cherry', 270], ['Tomato', 300], ['Carrot', 240], ['Potato', 170] ];

// 按子数组的第二个元素升序排序
usort($edibles, function($a, $b) {
    return $a[1] <=> $b[1];
});

运行后,数组会变成这样的顺序:
['Potato', 170] → ['Carrot', 240] → ['Apple', 250] → ['Cherry', 270] → ['Pear', 300] → ['Tomato', 300]

降序排序

如果需要从大到小排列,只需要把比较的两个元素调换位置即可:

usort($edibles, function($a, $b) {
    return $b[1] <=> $a[1];
});

兼容PHP5的写法

要是你的环境还在使用PHP5,就用传统的条件判断来实现比较逻辑:

usort($edibles, function($a, $b) {
    if ($a[1] == $b[1]) {
        return 0;
    }
    // 升序:小的在前返回-1,大的在前返回1
    return ($a[1] < $b[1]) ? -1 : 1;
});

进阶:处理相同数值的元素

如果遇到第二个元素数值相同的情况(比如Pear和Tomato都是300),可以在比较函数里添加额外逻辑,比如按第一个元素的字符串顺序排序,让结果更规整:

usort($edibles, function($a, $b) {
    // 先比较数值
    $numCompare = $a[1] <=> $b[1];
    if ($numCompare !== 0) {
        return $numCompare;
    }
    // 数值相同时,按名称的字母顺序升序排列
    return strcmp($a[0], $b[0]);
});

这样排序后,相同数值的元素会按名称的字母顺序排列,比如Pear会排在Tomato前面~

内容的提问来源于stack exchange,提问作者Arno Nymo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:01:25