如何在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
相关产品推荐
相关产品推荐

