在PHP中分别输出两行到控制台

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)

有没有正确的方法来解决这个问题?

谢谢

web*_*eat 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";
Run Code Online (Sandbox Code Playgroud)

这可以从一些ansicodes中获益,请查看本文档以获取更多详细信息.

谢谢@Joshua Klein的帮助.