Php 数组保持水平重复

Php 数组保持水平重复,php,sql,Php,Sql,我有27个区域,每小时统计一次人数,持续10个小时。当我需要数组输出特定于该区域的计数,然后移动到下一行时,我的数组会对每行中的所有区域重复相同的计数,以此类推。不确定是我的SQL查询还是我的php循环,或者两者兼而有之 仍然没有足够的信息,但我非常肯定您的问题是双重内环: foreach (...) { for (...) { foreach (...) { ... } } } 您只需要其中一个内部循环 那么,主

我有27个区域,每小时统计一次人数,持续10个小时。当我需要数组输出特定于该区域的计数,然后移动到下一行时,我的数组会对每行中的所有区域重复相同的计数,以此类推。不确定是我的SQL查询还是我的php循环,或者两者兼而有之



仍然没有足够的信息,但我非常肯定您的问题是双重内环:

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>