PHP如何在foreach循环中而不是在结束时回显?

时间:2015-04-10 12:35:33

标签: php

我对PHP很陌生,并且在弄清楚问题时遇到了一些麻烦。每当我使用foreach循环将某些内容回显到屏幕时,它只会在循环完成后回显。这使得页面加载时间相当长。

有没有办法让循环迭代后立即回显?

例如,

foreach ($a as $k => $v){
    echo $k . " : " . $v;
}

我希望它在完成一个循环而不是在结束时回显。

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:0)

每次迭代循环都会echo,但不会立即将结果发布到屏幕上。一旦页面在浏览器中呈现,您将只看到结果,除非您正在使用Javascript / AJAX进行某些操作以使其以不同的方式工作。

您没有像使用桌面/移动应用程序那样立即获得结果,因为PHP需要构建包含您使用PHP代码生成的呈现HTML文档的HTTP响应,然后将该响应发送到浏览器,它被渲染的地方。

答案 1 :(得分:0)

在调用php yes的浏览器中,您必须等待整个页面加载,并且在显示数据之前完成所有服务器执行。如果你想为了测试目的加快速度,可以在循环中放置一个中断来停止循环并继续。另外,为了逐个查看结果,您可以在服务器或终端/ cmd中的计算机上运行php文件。几年前曾经有过一种方法可以找到一个浏览器和Web服务器组合,它仍然支持php中的flush命令以进行浏览器快速发送。这样做的问题是缓冲区会覆盖并且不喜欢被发送出去,尤其是在当今这个时代有更多高级缓冲区。

答案 2 :(得分:0)

您可以使用输出缓冲来实现

类似的东西:

ob_start();
foreach ($a as $k => $v){
    echo $k . " : " . $v;
    ob_flush();
}
ob_end_flush();

但我不推荐它。您可以在this site

上详细了解相关信息

答案 3 :(得分:0)

在用重写问题进行了一些搜索后,我发现了一些需要使用flush()的信息;和ob_flush();.将它们添加到foreach循环的末尾会将其推送到浏览器并在每次迭代后显示它。

例如:

foreach ($a as $k => $v){
    echo $k . " : " . $v;
    flush();
    ob_flush();
}