Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php计数器循环输出24小时填充空值_Php_Loops_Foreach_While Loop_Counter - Fatal编程技术网

php计数器循环输出24小时填充空值

php计数器循环输出24小时填充空值,php,loops,foreach,while-loop,counter,Php,Loops,Foreach,While Loop,Counter,我有一个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 |2

我有一个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>";

    }
while($row=mysql\u fetch\u row($hourlycalls)){
$hourly='0';
foreach($hourlycalls作为$val){
如果($row[1]=$val['hour'])){
$hourly=$val['count'];
打破
} 
} 
$result.=”
“$row[0]”
“$row[1]”
“$row[2]”;
}
我试着加上一个柜台,但就是没法用。
有什么想法/建议吗?

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

$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>";
}
($hour=0;$hour<24;$hour++)的
{
如果(设置($results[$hour])){
$row=$results[$hour];
}否则{
$row=数组($date,$hour,0);
}
$row[1]=sprintf(“%02d:00,$row[1]);
$result.=”
“$row[0]”
“$row[1]”
“$row[2]”;
}

顺便说一句,我建议您摆脱使用
mysql\u fetch\u row
的习惯,改用
mysql\u fetch\u assoc
。通过列名访问返回的值使代码更具可读性。

:感谢您的输入!它现在确实正确了,并且正确地输出了日期和时间,只是现在所有计数都是0。我以为查询返回的时间像
01:00
,而不仅仅是
1
,所以我在数组中查找错误。现在试试。剩下的一件事似乎是,计数为0的行的日期显示了两次。我不明白这是怎么回事。我只在数组中放了一次,去掉如下内容:
$row=array(substr($date,0,-13),$hour,0)