如何使用 sleep() 在 while 循环中回显某些内容?

Posted

技术标签:

【中文标题】如何使用 sleep() 在 while 循环中回显某些内容?【英文标题】:How to echo something in a while loop with sleep()? 【发布时间】:2019-11-13 04:13:30 【问题描述】:

我有一个 while 循环来读取包含客户数据(姓名、电子邮件、网站)的 csv 文件。我用每秒回显每一行。所以我用 sleep(1) 和很多希望做了一个 while 循环,但是浏览器一直在等待,直到它完全加载。我知道,这就是 php 的工作原理,也许使用 javacript 很容易,但我真的没有关于 javascript 的胶水。甚至 flush() 技术也不起作用。也许我的主机有问题?我使用 one.com

我已经尝试了循环中的 sleep()。 - 加载直到完成 我已经尝试过刷新功能 - 相同

$handle = fopen ("csv.csv","r");
$csv = array();

while ( ($data = fgetcsv ($handle, 1000, "\t")) !== FALSE ) 
    $csv[] = $data;
    echo "Name=".$data[0]."<br>Email=".$data[1]."<br>Website=".$data[2];
    sleep(1);

fclose ($handle);

【问题讨论】:

如果我是你,我会花时间和精力学习 Javascript(和 Ajax)。不建议在网页上使用sleep(),因为这些调用会被阻塞,因此无法很好地扩展。最好一次性从后端获取所有数据并使用 Javascript 以您想要的方式呈现它。 它仅供我和我的同事使用。我们需要它的真正原因有点复杂,但这样它的功能。具有数百行的csv,每行有3个列,我需要等待1秒才能在网络浏览器中输出。如果您对此有 javascript 解决方案,请提供给我。 对不起。我没有完成的脚本,所以也不是正确的要求它的地方。我们很高兴帮助您解决现有代码的问题,但我们不是来为您解决的。 我知道。我只需要一个提示如何去做。否则,我们可以用“学习如何做”来回答 *** 中的每个问题:/ 我知道它可以在 while 循环内刷新任何内容。它只是在我的网络服务器上不起作用。也许我可以将 csv 的所有内容放在一个数组中,并让 javascript 在 1 秒延迟后显示它。这样我可能需要 javascript 部分(带有回声和延迟的循环)或更好的解决方案来在 while 循环中获得回声 谷歌搜索“Ajax 入门”之类的内容,然后一步一步地开始。 JS 还具有“延迟”操作的功能,使用 setTimeout() 一次性,或 setInterval() 每隔 n 毫秒执行一些代码。 【参考方案1】:

您可以同时使用 php 和 javascript 来执行此操作。

第 1 步:Javascript 将对 php 进行一次 ajax 调用,以将 csv 数据转换为 json 格式。

第 2 步:PHP 将读取 csv 文件,将数据存储到数组中,并将 json 编码的数据返回给 javascript。

第 3 步:使用 setInterval 函数在 javascript 中循环访问后端数据,如下所示:

var data = /* json data from ajax call */;

var i=0, html='';
var loop = setInterval(function()
    // Perform the operation here, which will print some data at interval of 1 second
    if(i==data.length) 
        clearInterval(loop);
    
, 1000);

【讨论】:

我过去常常搜索很长时间才能最终完成,以便将我的数组放入 javascript。所以解决方案是最终的var data = [&lt;?php echo '"'.implode('","', $data).'"' ?&gt;];,它工作正常=)

以上是关于如何使用 sleep() 在 while 循环中回显某些内容?的主要内容,如果未能解决你的问题,请参考以下文章

无限while循环内的Sleep()函数

Thread.sleep() 在 while 循环中

如何在while循环中评估函数

R Sys.sleep 打印在 while 循环中不起作用

添加一个没有 Thread.sleep 的延迟和一个啥都不做的 while 循环

当我进行异步调用时,是不是有必要在 iOS 和 Android 的 while 循环中使用 Thread.Sleep(1)?