按组分组,计算每组出现次数总和,并以格式化字符串打印数据
P粉970736384
2023-09-05 22:43:27
<p>我想根据两个列的值对一些行的数据进行分组和求和。</p>
<p>我的输入是:</p>
<pre class="brush:php;toolbar:false;">$array = [
['FA',12.9],
['FA',12.9],
['FB',12.2],
['FC',12.3],
['FA',12.9],
['FB',12.9],
['FA',12.4],
];</pre>
<p>我想将分组后的行值打印为一个字符串,然后是一个<code>x</code>和出现的总次数,格式如下:</p>
<pre class="brush:php;toolbar:false;">FA 12.9x3
FB 12.2x3</pre>
<p>我已经编写了代码来计算每个组中值的出现次数,但是我不知道如何以这种格式打印出来:</p>
<pre class="brush:php;toolbar:false;">$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;
}
}
}</pre>
<p>这个代码可以优化并以正确的格式打印出来吗?</p>
<p>期望的输出:</p>
<pre class="brush:php;toolbar:false;">FA 12.9x3
FB 12.2x1
FC 12.3x1
FB 12.9x1
FA 12.4x1</pre></p>
使用
array_reduce
以一种特殊而有用的方式,我们可以按名称将项目进行分组。然后再按值进行分组并计数。这个想法是传递一个累积值作为键的数组。输出: