You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PHP中使用usort排序关联数组时保留键名的问题

解决关联数组排序后键名丢失的问题

这个问题我之前也踩过坑!usort()函数的设计就是针对索引数组排序的,它会直接重置数组的键为数字序列,所以你的字符串键名key_akey_b这些自然就没了。要保留关联数组的键名,你需要用uasort()——它和usort()的用法几乎一致,但会维持原有的键值对应关系。

完整解决方案代码

// 你的原数组
$materials = [
    "key_a" => ["avg" => 2],
    "key_b" => ["avg" => 3],
    "key_c" => ["avg" => 0]
];

// 使用uasort替代usort,保留键名
uasort($materials, function($a, $b) {
    // 按avg值降序排序
    if ($a["avg"] == $b["avg"]) {
        return 0;
    }
    return ($a["avg"] < $b["avg"]) ? 1 : -1;
});

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

简化版(PHP 7+ 可用)

如果你的PHP版本是7及以上,可以用太空船运算符<=>简化回调逻辑,代码更简洁:

uasort($materials, function($a, $b) {
    return $b["avg"] <=> $a["avg"]; // 降序排序,交换a和b的位置就是升序
});

输出结果

执行后你会得到期望的保留键名的排序结果:

Array
(
    [key_b] => Array
        (
            [avg] => 3
        )

    [key_a] => Array
        (
            [avg] => 2
        )

    [key_c] => Array
        (
            [avg] => 0
        )

)

简单总结下:

  • usort():排序索引数组,重置键名
  • uasort():排序关联数组,保留键名
  • uksort():如果是要按键名排序,用这个函数

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

火山引擎 最新活动