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

如何在PHP中按order值对含嵌套键值的数组进行升序排序?

按嵌套数组的order字段升序排序的PHP实现

这事儿很简单!针对你这种带嵌套键值对的数组,我们可以用PHP的uasort()函数(如果需要保留原数组的键名)或者usort()(不在乎键名的话),配合自定义比较逻辑来实现按order字段升序排序。

保留原数组键名的方案(推荐)

因为你的原数组有特定的数字键,大概率需要保留这些键,所以用uasort()最合适:

// 你的原始数组
$items = [
    1240830 => ['name' => 'Jannah', 'order' => 8],
    1240831 => ['name' => 'Eadie', 'order' => 10],
    1240832 => ['name' => 'abc@yahoo.ca', 'order' => 0],
    1240911 => ['name' => 'on', 'order' => 0],
];

// 按order字段升序排序,同时保留原键
uasort($items, function($a, $b) {
    // 太空船运算符直接比较order值,返回-1/0/1实现升序
    return $a['order'] <=> $b['order'];
});

// 查看排序后的结果
print_r($items);

运行后你会得到这样的结果:

Array
(
    [1240832] => Array
        (
            [name] => abc@yahoo.ca
            [order] => 0
        )

    [1240911] => Array
        (
            [name] => on
            [order] => 0
        )

    [1240830] => Array
        (
            [name] => Jannah
            [order] => 8
        )

    [1240831] => Array
        (
            [name] => Eadie
            [order] => 10
        )
)

兼容低版本PHP的写法(PHP < 7.0)

如果你的PHP版本低于7.0,不支持太空船运算符<=>,可以换成传统的比较逻辑:

uasort($items, function($a, $b) {
    if ($a['order'] === $b['order']) {
        return 0;
    }
    // 升序:小的在前,所以a的order更小就返回-1
    return $a['order'] < $b['order'] ? -1 : 1;
});

不需要保留原键的情况

如果不在乎原数组的键名,直接用usort()替换uasort()就行,排序后键会被重置为从0开始的连续数字索引。

内容的提问来源于stack exchange,提问作者Rana. Amir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:57:47