PHP数组按双列分组统计频次并格式化输出优化问询
PHP数组按双列分组统计并指定格式输出
需求说明
对给定PHP数组的元素按「标识+数值」两个列值分组,统计每组出现次数,并以「标识 数值x次数」的格式输出。
输入数组
$array = [ ['FA',12.9], ['FA',12.9], ['FB',12.2], ['FC',12.3], ['FA',12.9], ['FB',12.9], ['FA',12.4], ];
期望输出
FA 12.9x3 FB 12.2x1 FC 12.3x1 FB 12.9x1 FA 12.4x1
当前代码
$new = []; foreach ($array as $key=> $value) { if (!array_key_exists($value[0],$new)) { $new[$value[0]]=[strval($value[1])=>1]; } else { if (!array_key_exists(strval($value[1]),$new[$value[0]])) { $new[$value[0]][strval($value[1])]=1; // $no+=1; } else { $count= $new[$value[0]]; $count=$count[strval($value[1])]; $count+=1; $new[$value[0]][strval($value[1])]=$count; } } }
优化方案与格式输出实现
你的统计逻辑可行,但嵌套判断过于繁琐,以下是简化后的统计代码,同时实现指定格式输出:
方案1:使用复合键统计(更简洁)
$counts = []; // 分组统计次数 foreach ($array as $item) { // 用分隔符拼接标识和数值作为唯一键,避免组合冲突 $uniqueKey = $item[0] . '|' . $item[1]; $counts[$uniqueKey] = isset($counts[$uniqueKey]) ? $counts[$uniqueKey] + 1 : 1; } // 按指定格式输出 foreach ($counts as $key => $num) { list($flag, $value) = explode('|', $key); echo "$flag $value" . "x$num\n"; }
方案2:保持嵌套数组结构(兼容原逻辑)
$counts = []; // 分组统计次数 foreach ($array as $item) { $flag = $item[0]; $value = $item[1]; // 简化判断,直接初始化计数再累加 if (!isset($counts[$flag][$value])) { $counts[$flag][$value] = 0; } $counts[$flag][$value]++; } // 按指定格式输出 foreach ($counts as $flag => $valueCounts) { foreach ($valueCounts as $value => $num) { echo "$flag $value" . "x$num\n"; } }
两种方案都能得到符合要求的输出,方案1代码更简洁,方案2保留了标识分组的层级结构,可根据需求选择。
内容的提问来源于stack exchange,提问作者Yaseera Irfan
相关产品推荐
相关产品推荐

