PHP - 10秒后从数组中获取新值

时间:2015-12-13 15:55:09

标签: php arrays timeout

我有一个名为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();

}

    ?>

2 个答案:

答案 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";