web*_*eat 8 php command-line-interface
我写了这个小的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";
Run Code Online (Sandbox Code Playgroud)
如您所见,在每次迭代中,我正在清理该行(8是ASCII代码backspace)并在同一行显示新文本.
这样可以正常工作,但现在我想在两条不同的行中显示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";
Run Code Online (Sandbox Code Playgroud)
这里的问题是backspace在\n字符处停止,因此它删除第二行,但保留第一行,因为它给出了以下输出:
Counter: 0
Counter: 1
Counter: 2
Counter: 3
Counter: 4
Counter: 5
Counter: 6
Counter: 7
Counter: 8
Counter: 9
Total: 45
Run Code Online (Sandbox Code Playgroud)
有没有正确的方法来解决这个问题?
谢谢
我终于找到了一个有效的方法:
<?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";
Run Code Online (Sandbox Code Playgroud)
这可以从一些ansicodes中获益,请查看本文档以获取更多详细信息.
谢谢@Joshua Klein的帮助.
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |