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

如何对多维数组的第二个索引排序?附数组类型咨询

嘿,我来帮你理清楚这两个问题~

你的数组类型与排序方案

首先回答第一个问题:你提到的这种数组是二维索引数组——简单来说,就是一个数组里的每个元素本身又是一个数组,而你要排序的float值正好在这些子数组的第二个位置(对应索引1,因为PHP数组的索引从0开始)。举个典型的例子,你的数组大概长这样:

$sampleArray = [
    ["apple", 2.45],
    ["banana", 1.20],
    ["orange", 3.10]
];

接下来是排序的问题:你用rsort或arsort没得到预期结果很正常,因为这两个函数是给一维数组排序的,它们会把你的每个子数组当成一个整体来比较,而不会深入到子数组里的float值。要实现按子数组第二个元素排序,得用自定义排序函数,推荐用PHP的usort()(如果不需要保留原数组的键)或者uasort()(如果要保留原键)。

升序(ASC)排序方案

用usort()配合匿名函数,通过太空船运算符直接比较子数组的第二个元素(PHP 7及以上版本支持,处理float非常方便):

usort($sampleArray, function($a, $b) {
    // 比较两个子数组的第二个元素(索引1)
    return $a[1] <=> $b[1];
});

如果你的PHP版本低于7,就用传统的比较逻辑:

usort($sampleArray, function($a, $b) {
    if ($a[1] === $b[1]) {
        return 0;
    }
    // 小于返回-1,大于返回1,实现升序
    return $a[1] < $b[1] ? -1 : 1;
});

降序(DESC)排序方案

只需要把比较的两个元素反过来就行:

// PHP7+版本
usort($sampleArray, function($a, $b) {
    return $b[1] <=> $a[1];
});

// 低版本PHP
usort($sampleArray, function($a, $b) {
    if ($a[1] === $b[1]) {
        return 0;
    }
    // 大于返回-1,小于返回1,实现降序
    return $a[1] > $b[1] ? -1 : 1;
});

这样处理后,你的数组就会按照子数组里的float值完成升序或降序排序啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:03:48