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

PHP用rsort()排序整数浮点数混合数组结果异常如何解决

问题根因

你使用的rsort()本身支持整数、浮点数混合排序,排序逻辑没有问题,异常来自PHP关联数组的键类型转换规则:

  • PHP关联数组的键仅支持整数、字符串两种类型,浮点数作为键时会被自动强制转换为整数,小数部分直接截断。你示例中的1.7、1.9、1.4作为键时都会被转为1,后面的赋值会覆盖前面的同名键,最终$high_name实际仅保留一个元素1 => "d",所以你无论取排序后哪个位置的数值作为索引,拿到的结果都是d。
修复方案

建议直接将数值与对应的标识绑定后排序,从根源上避免浮点数作为键的转换问题,代码如下:

// 把数值和对应标识绑定为二维数组
$list = [
    ['value' => 1.7, 'tag' => 'a'],
    ['value' => 1, 'tag' => 'b'],
    ['value' => 1.9, 'tag' => 'c'],
    ['value' => 1.4, 'tag' => 'd'],
];

// 按数值从高到低排序
usort($list, function($prev, $next) {
    return $next['value'] <=> $prev['value'];
});

// 按排序后顺序取标识
$on1 = $list[0]['tag'];
$on2 = $list[1]['tag'];
$on3 = $list[2]['tag'];
$on4 = $list[3]['tag'];

运行后输出结果和你预期完全一致:

on1 = c
on2 = a
on3 = d
on4 = b

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:12:01