Php 数组保持水平重复
我有27个区域,每小时统计一次人数,持续10个小时。当我需要数组输出特定于该区域的计数,然后移动到下一行时,我的数组会对每行中的所有区域重复相同的计数,以此类推。不确定是我的SQL查询还是我的php循环,或者两者兼而有之Php 数组保持水平重复,php,sql,Php,Sql,我有27个区域,每小时统计一次人数,持续10个小时。当我需要数组输出特定于该区域的计数,然后移动到下一行时,我的数组会对每行中的所有区域重复相同的计数,以此类推。不确定是我的SQL查询还是我的php循环,或者两者兼而有之 仍然没有足够的信息,但我非常肯定您的问题是双重内环: foreach (...) { for (...) { foreach (...) { ... } } } 您只需要其中一个内部循环 那么,主
仍然没有足够的信息,但我非常肯定您的问题是双重内环:
foreach (...) {
for (...) {
foreach (...) {
...
}
}
}
您只需要其中一个内部循环
那么,主要的问题是数组格式很难循环。这里有一种方法可以将数组重新格式化为可以轻松循环的格式,并生成完整的表输出:
<?php
$groupedByArea = array();
foreach ($coo as $row) {
extract($row['fac_reports']);
$groupedByArea[$area][$hour] = $count;
}
?>
<table>
<!-- table headers -->
<tr>
<th>Area</th>
<?php foreach (array_keys(current($groupedByArea)) as $hour) : ?>
<th><?php echo $hour; ?></th>
<?php endforeach; ?>
</tr>
<!-- data rows -->
<?php foreach ($groupedByArea as $area => $counts) : ?>
<tr>
<th><?php echo $area; ?></th>
<?php foreach ($counts as $count) : ?>
<td><?php echo $count; ?></td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</table>
地区
(未经测试,但我希望您能理解。)这取决于所有检索行中相同排序的小时数,否则输出将与实际数据不匹配。什么是
$hr
?什么是$coo
?为什么二维表格有三个循环?为什么在外循环和内循环中使用$all
?您的阵列一开始是什么样子的?我想你应该先试着自己调试这个乱七八糟的东西。那张图片正在干扰我的眼睛。我想如果你把循环分解成它们自己的方法,并使用更具描述性的变量名,调试起来会容易得多。仅从这个脚本来看,很难确定函数的意图是什么。从我所能收集到的信息来看,我认为首先将SQL查询的结果扁平化为一个简单的二维数组,然后循环使用该数组来创建html。这可能更容易重新开始。当我删除内部循环(foreach$coo作为$count)并简单地将$count['fac_reports']['count']改回$all['fac_reports']['count']它向下重复270次。因此,我每个区域有10行,而不是1行。相信我,我已经尝试了许多可能性,这就是我发布它的原因。感谢你愿意提供帮助。太棒了!谢谢。现在我只需要获得将am输出到pm的时间。
<?php
$groupedByArea = array();
foreach ($coo as $row) {
extract($row['fac_reports']);
$groupedByArea[$area][$hour] = $count;
}
?>
<table>
<!-- table headers -->
<tr>
<th>Area</th>
<?php foreach (array_keys(current($groupedByArea)) as $hour) : ?>
<th><?php echo $hour; ?></th>
<?php endforeach; ?>
</tr>
<!-- data rows -->
<?php foreach ($groupedByArea as $area => $counts) : ?>
<tr>
<th><?php echo $area; ?></th>
<?php foreach ($counts as $count) : ?>
<td><?php echo $count; ?></td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</table>