我写了这个小的PHP脚本,从0到9计数,同时也显示了计算数字的总和。
<?php
$sum = 0;
$line = '';
for ($i=0; $i < 10; $i++) {
$sum += $i;
echo str_repeat(chr(8), strlen($line)); // cleaning the line
$line = "Counter: {$i} | Total: {$sum}";
echo $line; // Outputing the new line
sleep(1);
}
echo "\n";
如您所见,在每次迭代中,我正在清理该行(8
是backspace
的ASCII代码)并在同一行显示新文本。
这很好用,但现在我想在两条不同的行中显示Count和Total,并以与我用一行相同的方式设置两条线的动画。所以我尝试了这段代码:
<?php
$sum = 0;
$line = '';
for ($i=0; $i < 10; $i++) {
$sum += $i;
echo str_repeat(chr(8), strlen($line)); // cleaning the line
$line = "Counter: {$i}\nTotal: {$sum}";
echo $line; // Outputing the new line
sleep(1);
}
echo "\n";
这里的问题是backspace
在\n
字符处停止,因此删除了第二行,但保留了第一行,它提供了以下输出:
Counter: 0
Counter: 1
Counter: 2
Counter: 3
Counter: 4
Counter: 5
Counter: 6
Counter: 7
Counter: 8
Counter: 9
Total: 45
有没有正确的方法来解决这个问题?
由于
答案 0 :(得分:5)
我终于找到了一个有效的方法:
<?php
$sum = 0;
$line = '';
for ($i=0; $i < 10; $i++) {
$sum += $i;
$line = "Counter: {$i}\nTotal: {$sum}";
echo $line; // Outputing the new line
sleep(1);
echo chr(27) . "[0G"; // go to the first column
echo chr(27) . "[1A"; // go to the first line
echo chr(27) . "[2M"; // remove two lines
}
echo "Total: {$sum}\n";
这可以从一些ansicodes中获益,请查看This document了解更多详情。
感谢@Joshua Klein的帮助。
答案 1 :(得分:1)
非常蹩脚的回答(适用于linux):
<?php
$sum = 0;
$line = '';
for ($i=0; $i < 10; $i++) {
$sum += $i;
echo str_repeat(chr(8), strlen($line)); // cleaning the line
$line = "Counter: {$i}\nTotal: {$sum}";
echo $line; // Outputing the new line
sleep(1);
system("clear");
}
echo "\n";
真正的答案与\ r(换行)或不同的ansicodes字符有关,你可以在这里阅读:
Clear PHP CLI output