php - 在 PHP 中按键和求和值对多维数组进行分组
问题描述
Stack Overflow 上也有类似的问题,但与我的完全不同,我还想仔细检查一下我这样做是不是最有效的方式(资源方面)。
我有提交的调查,我想统计结果。每个调查都保存在一个多维数组中,如下所示:
Array ( [name] => Clark Kent [rating] => 5 )
这些来自循环,因为它们是单独的数据库条目。
所以我首先创建一个包含所有这些组合的新数组:
$mods = array();
$index = -1;
foreach($fields as $field) {
$index++;
$mods[$index]['name'] = $field['name'];
$mods[$index]['rating'] = $field['rating'];
}
然后我将这些分组,以便同名的所有评级都放在一起,以便我以后可以总结它们。
$groups = array();
foreach ($mods as $value) {
$groups[$value['name']][] = $value;
}
这会产生以下结果:
Array (
[Clark Kent] => Array (
[0] => Array (
[name] => Clark Kent
[rating] => 5
)
[1] => Array (
[name] => Clark Kent
[rating] => 5
)
)
[Peter Parker] => Array (
[0] => Array (
[name] => Peter Parker
[rating] => 5
)
[1] => Array (
[name] => Peter Parker
[rating] => 5
)
)
[Bruce Wayne] => Array (
[0] => Array (
[name] => Bruce Wayne
[rating] => 5
)
[1] => Array (
[name] => Bruce Wayne
[rating] => 5
)
)
[Bruce Banner] => Array (
[0] => Array (
[name] => Bruce Banner
[rating] => 5
)
[1] => Array (
[name] => Bruce Banner
[rating] => 5
)
)
)
我想要完成的是这样的:
<table>
<tr>
<td>Clark Kent</td>
<td>{average of all ratings}</td>
</tr>
</table>
我大部分时间都在那里,但我被卡住了!我不确定如何获取name
没有任何类型的索引或键的分组,以便我可以将该值用于我的表。然后我需要对每个分组值求和。
解决方案
我会在从数据库中读取数据的循环中进行所有必要的数学运算。像这样的东西:
$ratings = array();
while ($row = $result->fetch_assoc()) {
$name = $row['name'];
if (!isset($ratings[$name])) {
$ratings[$name] = array('count' => 1, 'sum' => $row['rating']);
}
else {
$ratings[$name]['count']++;
$ratings[$name]['sum'] += $row['rating'];
}
}
然后你可以像这样输出你的表:
echo "<table>";
foreach ($ratings as $name => $r) {
echo "<tr><td>$name</td><td>" . round($r['sum'] / $r['count'], 1) . "</td></tr>";
}
echo "</table>";
推荐阅读
- python - 如何使用 Python 在 Windows 上获取当前光标状态(WaitCursor、Arrow、Default 等)?
- jquery - jQuery Lazy - 一次加载所有图像
- python-3.x - 如何在不使用动画的情况下更新 matplotlib 散点图中的 x 和 y 数据数组?
- mysql - 在 Google BigQuery 中进行聚合时是否可以运行计算
- windows-10 - W10 + cygwin + 期望
- xml - “在 solr 中进行拼写检查后没有返回建议”
- angular - Angular 5 和 router.navigate 的路由问题
- python - 如何使用键值将列表转换为python中的字典?
- r - 如何将此数据帧转换为二进制形式?
- php - 我可以在 PHP 中重新定义常量而不会出错