【问题标题】:php counter loop to out put 24 hours fill empty valuesphp计数循环输出24小时填充空值
【发布时间】:2014-10-03 00:45:40
【问题描述】:

我有一个 sql 结果为:

    |date       |hour |count  |
    |2014-03-03 |20   |10     |
    |2014-03-03 |18   |9      |

我想显示 24 小时的计数,但是当计数为 0 时,它不显示任何内容。 我想看到的输出是:

2014-03-03 | 00:00 | 0
2014-03-03 | 01:00 | 0
2014-03-03 | 02:00 | 9
.
.
.
2014-03-03 | 23:00 |23

以下是生成显示每小时计数的表格的 PHP 代码:

          while ($row = mysql_fetch_row($hourlycalls)) {
        $hourly = '0';
        foreach($hourlycalls as $val) {
            if($row[1] == $val['hour']) {
                $hourly = $val['count'];
                break;
            } 
        } 

        $result .="
            <tr><td align=center>".$row[0]."</td>
            <td align=center>".$row[1]."</td>
            <td align=center>".$row[2]."</td></tr>";

    }

我尝试添加一个计数器,但无法使其正常工作。 有什么想法/建议吗?

【问题讨论】:

    标签: php loops foreach while-loop counter


    【解决方案1】:

    将所有结果放入一个数组中,其索引为小时:

    $results = array();
    while ($row = mysql_fetch_row($hourlycalls)) {
        $results[$row[1]] = $row;
    }
    

    然后使用每小时循环显示查询中的值,或未返回的小时的默认值:

    for ($hour = 0; $hour < 24; $hour++) {
        if (isset($results[$hour])) {
            $row = $results[$hour];
        } else {
            $row = array($date, $hour, 0);
        }
        $row[1] = sprintf("%02d:00", $row[1]);
        $result .= "
            <tr><td align=center>".$row[0]."</td>
            <td align=center>".$row[1]."</td>
            <td align=center>".$row[2]."</td></tr>";
    }
    

    顺便说一句,我建议你改掉使用mysql_fetch_row 的习惯,改用mysql_fetch_assoc。通过列名访问返回值使代码更具可读性。

    【讨论】:

    • :感谢您的意见!它现在循环确实正确,并且正确输出日期和时间,只是现在所有计数都是 0
    • 我认为查询返回的时间类似于01:00,而不仅仅是1,所以我在数组中查找错误。立即尝试。
    • 似乎还剩下一件事,计数为 0 的行的日期显示两次。
    • 我不明白这是怎么回事。我只在数组中放了一次。
    • 去掉它的喜欢:$row = array(substr($date, 0, -13), $hour, 0)
    猜你喜欢
    • 2022-07-06
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    相关资源
    最近更新 更多