来自foreach,for或while循环的打印值

时间:2013-07-20 15:46:59

标签: php loops

我正在尝试为包含循环中收到的信息的表打印一行。这确实有效,但是,数组I循环有大约200个项目,它会挂起,直到检查每个项目。有没有办法在每次迭代时打印行? 我使用的示例代码:

        foreach ($array_check as $dns) {
        if (checkdnsrr($dns. '.',"A")) {
            $ret = "<tr> 
                <td><span class='badge badge-important'><i class='icon-remove icon-white'></i></span></td>
                <td>$dns</td>
                <td>-</td>
                <td>-</td>
                <td>-</td>
                <td>option</td>
                </tr><br/>";
            echo $ret;
        } else {
            $ret = "<tr>
                <td><span class='badge badge-success'><i class='icon-ok icon-white'></i></span></td>
                <td>$dns</td>
                <td>-</td>
                <td>-</td>
                <td>-</td>
                <td>option</td>
                </tr><br/>";
            echo $ret;
        }
        flush();
        ob_flush();
        usleep(1000000);
    }

任何建议都值得赞赏,我在互联网上搜索了很多这方面的内容,大多数情况下我发现需要关闭的output_buffering和gzip也是关闭的。

我将它们都禁用但仍然挂起,直到显示任何输出完成。

提前致谢!

2 个答案:

答案 0 :(得分:0)

首先,对您的HTML进行一点修正:<br>之后不需要<tr>。这实际上是错误的,你不应该在表体内添加任何不同于<tr>的内容。

关于你的问题,如果我做对了你想要逐行打印输出,同时执行循环,对吧?
您尝试做的是非常依赖于浏览器,更好的更改方法:通过AJAX请求数据,在您的PHP脚本中只需使用:

$output = array();
foreach ($array_check as $dns) {
    $output[] = checkdnsrr($dns. '.', "A");
}
header('Content-type: application/json');
echo json_encode($output);

然后使用javascript添加您喜欢的时间来解析客户端的HTML,或者使用JQuery并添加一些精美的动画。

编辑:我忘记了checkdnsrr,修复了它。

答案 1 :(得分:0)

显示需要时间,因为你使用usleep(1000000);等一秒钟。

而不是使用if else来显示具有此类或该类的行,您只需执行以下操作:

    foreach ($array_check as $dns) {
        echo "<tr> 
            <td><span class='badge badge-".((checkdnsrr($dns. '.',"A"))?'important':success)."'><i class='icon-remove icon-white'></i></span></td>
            <td>$dns</td>
            <td>-</td>
            <td>-</td>
            <td>-</td>
            <td>option</td>
            </tr><br/>";
    flush();
    ob_flush();
    usleep(1000000);
}