数组保持水平重复

时间:2012-01-24 23:25:07

标签: php sql

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

array repeating image http://slographicarts.com/wp-content/uploads/2012/01/arrays_repeating.jpg

    <?php 
    echo '<tr>';
    echo '<td class="tableTdContent">Areas</td>';
    echo '<td class="tableTdContent">Area ID</td>';
    foreach($rhh as $hr)
    { 
    echo '<td class="tableTdContent">'. ($hr['fac_reports']['hour']).'</td>';
    }
    echo '</tr>';
    $j=0;
    foreach($raa as $all)
{ 
echo '<tr>';
echo '<td class="tableTdContent">'. strip_tags($all['fac_reports']['areaname']).'</td>';
echo '<td class="tableTdContent">' . $j . '</td>';
for ($i = 0; $i < count($hr); $i++)
{
foreach ($coo as $count)
    {
    echo '<td class="tableTdContent">'.$count['fac_reports']['count'].'</td>'; 
    }

}
echo '</tr>';
$j++}

?>

sql and array http://slographicarts.com/wp-content/uploads/2012/01/array_sql.jpg

1 个答案:

答案 0 :(得分:1)

仍然没有足够的信息可以继续,但我非常肯定你的问题是双内循环:

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>

(未经测试,但我希望你明白这一点。)
这取决于所有检索行中相同排序的小时数,否则输出将与实际数据不匹配。