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

如何在PHP中动态提取数组同前缀组的最后一个组合值

实现PHP数组分组取最大值并重组的方案

当然可以实现这个需求!本质上我们需要按下划线前的数字分组,然后在每组里保留下划线后数值最大的项,最后再把它们拼接成目标格式的数组。我给你两种可行的实现方式:

方式一:直接处理原始数组(更高效)

不需要先拆分成两个数组,直接遍历原始数组就能完成分组和最大值筛选:

$original_array = [
    '53_0.1',
    '53_0.3',
    '54_0.2',
    '54_0.1',
    '54_0.1',
    '54_0.19',
    '56_0.19',
    '56_0.50'
];

$result = [];

foreach ($original_array as $item) {
    // 分割每个元素为键和数值
    list($key, $value) = explode('_', $item);
    $float_val = (float)$value;
    
    // 如果当前键未记录,或者当前数值比已存的更大,就更新
    if (!isset($result[$key]) || $float_val > (float)$result[$key]) {
        $result[$key] = $value;
    }
}

// 将键值对重新拼接成目标格式,并转为索引数组
$final_array = array_map(function($key, $val) {
    return "{$key}_{$val}";
}, array_keys($result), $result);

print_r($final_array);

方式二:基于已拆分的$arr1和$arr2处理

如果你已经拆分好了两个数组,也可以用这种方式:

$arr1 = ['53','53','54','54','54','54','56','56'];
$arr2 = ['0.1','0.3','0.2','0.1','0.1','0.19','0.19','0.50'];

$result = [];

// 遍历两个数组(确保长度一致)
foreach ($arr1 as $index => $key) {
    $value = $arr2[$index];
    $float_val = (float)$value;
    
    if (!isset($result[$key]) || $float_val > (float)$result[$key]) {
        $result[$key] = $value;
    }
}

// 拼接成目标格式
$final_array = array_map(function($key, $val) {
    return "{$key}_{$val}";
}, array_keys($result), $result);

print_r($final_array);

运行结果

两种方式都会输出你想要的数组:

Array
(
    [0] => 53_0.3
    [1] => 54_0.19
    [2] => 56_0.50
)

小提示:如果遇到数值精度问题(比如多位小数),可以用bccompare()函数来做更精确的比较,避免浮点型误差~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:24:42