Rio*_*Act 2 php arrays grouping average multidimensional-array
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'];
}
Run Code Online (Sandbox Code Playgroud)
然后我将它们分组,以便同名的所有评分都在一起,以便稍后我可以对它们进行求和。
$groups = array();
foreach ($mods as $value) {
$groups[$value['name']][] = $value;
}
Run Code Online (Sandbox Code Playgroud)
这会产生以下结果:
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
)
)
)
Run Code Online (Sandbox Code Playgroud)
我想要完成的事情是这样的:
<table>
<tr>
<td>Clark Kent</td>
<td>{average of all ratings}</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
我已经完成了大部分工作,但我被困住了!我不确定如何获取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'];
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样输出你的表:
echo "<table>";
foreach ($ratings as $name => $r) {
echo "<tr><td>$name</td><td>" . round($r['sum'] / $r['count'], 1) . "</td></tr>";
}
echo "</table>";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1664 次 |
| 最近记录: |