【问题标题】:How to echo counts of for loop just once without multiple echoing?如何在没有多次回显的情况下仅回显一次 for 循环的计数?
【发布时间】:2017-12-26 17:09:50
【问题描述】:

我想这个问题很清楚。我想要的是打印计数并为下一个循环或特定睡眠后更新相同的回声。但是当我运行下面的代码时,多个回显就完成了。我只想回显一次并更新/替换最后一个回显。我不想使用 html/javascript ,我希望在 PHP 中实现这一点。下面是代码。

<?php
if (ob_get_level() == 0) ob_start();

for ($i = 0; $i<50000; $i++){

         echo $i;   

        ob_flush();
        flush();
        sleep(1);

}

ob_end_flush();
?>

【问题讨论】:

  • 这不是它的工作方式。 PHP 中的所有内容都是在服务器端运行的,完成后,完整的代码会发送到 apache,然后由 apache 将其发送到您的浏览器。我猜你想要的是:显示 1,然后擦除 1 并显示 2,然后擦除 2 并显示 3……等等。这在 JS 中真的很容易,但 php 真的不是为此而生的。
  • 其实只是为了完整,是的,您可以在 php 完成之前开始在客户端浏览器中显示,但是,您仍然无法删除已发送到浏览器的内容,而不使用 JS。

标签: php codeigniter flush


【解决方案1】:

这是丑陋的 AF……但它确实有效……

<style>
div.container { position:relative ; width:50px;height:50px; }
div.count { 
    position:absolute;
    top:0;
    left:0;
    right:0;
    bottom:0;
    background:#FFF;
    width:50px ;
    height:50px ;
}
</style>
<div style="position:relative;"><?php

    if (ob_get_level() == 0) ob_start();

    for ( $i = 0 ; $i < 10 ; $i++ )
    {
        ob_flush();
        flush();
        echo '<div class="count">'.$i.'</div>' ;
        sleep(1) ;
    }

    ob_end_flush();

?></div>

【讨论】:

    【解决方案2】:

    你也可以使用break;循环中的语句,停止回显。

     for ( $i = 0 ; $i < 10 ; $i++ )
    {
        ob_flush();
        flush();
        echo '<div class="count">'.$i.'</div>' ;
        break;       
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 2015-05-27
      相关资源
      最近更新 更多