在 php 中使用循环和睡眠方法构建倒计时

Build a countdown using a loop and sleep method in php

我正在尝试 PHP 使用 sleep() 方法在执行暂停一秒后打印出序列号,但随后代码暂停执行该持续时间,然后瞬间执行循环.

我所期待的

我原以为对于该循环中的每次迭代,它都会打印出一个数字,然后调用 sleep() 这会将代码延迟一秒钟,然后打印出下一个数字,然后延迟等等等等..

正在使用代码

<?php
$myarr=array(1,2,3,4,5,6,7,8,9,10);
foreach($myarr as $p){ 
//print out a number and then pause for a sec
echo "$p <br/>";
sleep(1);
/*the line above instead makes the thread sleep for one second and then prints the rest of the numbers in a flash instead of printing a single number and pausing and so on and so forth*/
}
?>

您可以通过在睡眠前刷新输出来实现它

代码将是:

<?php

$myarr=array(1,2,3,4,5,6,7,8,9,10);
foreach($myarr as $p){ 
//print out a number and then pause for two seconds

    ob_start();

                  echo "$p <br/>";

    $size = ob_get_length();
    ob_end_flush();
    @ob_flush();
    flush();
    
 sleep(2);

}
?>

基本上 PHP 确实完全按照您的意愿行事...只是不在浏览器上... 一种方法是通过 ob_flush :

<?php

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

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

        echo "<br>" . $i;
        echo str_pad('',4096)."\n";

        ob_flush();
        flush();
        sleep(2);
}

echo "Done.";

ob_end_flush();

?>

这将每 2 秒打印一个数字......但是它是呃......它的功能并不是最好的......至少前 4-5 秒 - 这意味着 0,1,也许 2 是当我们开始看到睡眠时已经打印出来了。