我有一个名为test的数组。在循环时,我希望在10秒后从数组中获取下一个值。例如,echo的第一个值是A.
值为A.然后,10秒后,该值将被替换为B.值为B.再次10秒后,该值将替换为C.值为C.它将重复下一步价值并回到A并继续这个过程。
到目前为止,它是一个接一个地执行,但不是替换值。我想只是值的变化,但句子“值是”停留,不执行所有“值是B”,“值是C”等等。
这是我到目前为止所尝试过的。
<?php
@ini_set("output_buffering", "Off");
@ini_set('implicit_flush', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('max_execution_time',1200);
header( 'Content-type: text/html; charset=utf-8' );
$test=array("A","B","C","D","E");
foreach ($test as $value) {
$var="The value is $value";
echo $var;
if(sleep(10)!=0)
{
echo "sleep failed script terminating";
break;
}
flush();
ob_flush();
}
?>
答案 0 :(得分:0)
你可以简化很多。对我来说这没有问题:
<?php
@ini_set("output_buffering", "Off");
@ini_set('implicit_flush', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('max_execution_time',1200);
header( 'Content-type: text/html; charset=utf-8' );
$test=array("A","B","C","D","E");
foreach ($test as $value) {
echo "The value is $value<br>\n";
sleep(10);
flush();
ob_flush();
}
输出显然是:
The value is A
The value is B
The value is C
The value is D
The value is E
考虑到你在这里的评论,你实际上要求你在问题中没有说的东西:在每次迭代时覆盖可见输出。这是完全不同的东西。正如评论中所提到的,这是不同的,而不是微不足道的,因为你必须“收回”你已经刷新的东西。
这是CLI的工作变体,只显示一个句子,大写字母每10秒更改一次。对于Web环境,事情要复杂得多,您必须实现一些小的客户端逻辑,从DOM中再次删除以前刷新的文本。然而,为此,直接在客户端迭代这些字母会容易一千倍。
<?php
@ini_set("output_buffering", "Off");
@ini_set('implicit_flush', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('max_execution_time',1200);
header( 'Content-type: text/html; charset=utf-8' );
$test=array("A","B","C","D","E");
foreach ($test as $value) {
echo "The value is $value";
flush();
sleep(10);
echo str_pad('', 14, "\x08");
}
答案 1 :(得分:0)
控制台有一个解决方案:只需在回显值之前添加“退格”键码(\x08
)
<?php
$test=array("A","B","C","D","E");
echo "The value is ";
foreach ($test as $value) {
echo "\x08" . $value;
sleep(10);
}
echo "\n";