【问题标题】:PHP how to echo during a foreach loop rather than at the end?PHP如何在foreach循环期间而不是在结束时回显?
【发布时间】:2015-04-10 12:35:32
【问题描述】:

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

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

例如,

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

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

非常感谢任何帮助!

【问题讨论】:

  • 这只会在每次执行时回显
  • 你想在 foreach 结束后获得 $k 值吗?
  • 我打赌这个提供的代码不是原始代码,我打赌你在 foreach 后面放了一个; 行尾符号,就像这样foreach ($a as $k => $v); {
  • echo 之后尝试ob_flush(); 如果这不起作用,请参考下面的完美答案或sitepoint.com/php-streaming-output-buffering-explained
  • 不,这应该在每个循环周期中单独回显。

标签: php


【解决方案1】:

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

例如:

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

【讨论】:

    【解决方案2】:

    你可以通过输出缓冲来做到这一点

    类似:

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

    但我不推荐它。你可以在this site阅读更多关于它的信息

    【讨论】:

      【解决方案3】:

      循环将在每次迭代中echo,尽管它不会立即将结果发布到屏幕上。只有在页面在浏览器中呈现后,您才会看到结果,除非您使用 Javascript/AJAX 做一些事情以使其以不同的方式工作。

      您不会像使用桌面/移动应用程序那样立即看到结果,因为 PHP 需要构建一个 HTTP 响应,其中包含您使用 PHP 代码生成的渲染 HTML 文档,然后将该响应发送到浏览器,它在哪里呈现。

      【讨论】:

      • 有没有办法让页面在回显后立即更新呢?或者有没有更好的方法在执行后立即将信息打印到屏幕上?
      • 首先您需要了解如何使用 PHP 呈现 HTML 页面。为此请咨询 Google 或 PHP 文档。您可以使用 Javascript 和 AJAX 通过调用某些页面等来动态更新页面。虽然这超出了这个问题的范围。
      • 很好的解释你应该提到ob_flush()
      • PHP 不构建 HTTP 响应。 PHP 可以修改响应,但它被发送到浏览器并由 http 服务器构建。 PHP 也可以在 CLI 中运行,然后呢?如果您使用浏览器,则可以使用 ob_flush(); 将结果刷新到它;
      • @Robert 我提供了一个简化的解释。我不打算深入研究 PHP 能做什么和不能做什么,因为 OP 首先不了解基础知识。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-29
        • 1970-01-01
        • 1970-01-01
        • 2018-10-08
        • 2016-01-30
        • 2016-01-21
        • 2018-04-22
        相关资源
        最近更新 更多