在最后一个结束后打印每个数字的空白空间量

Amount of empty spaces to print each number after last one ends

我正在尝试使用 PHP 在浏览器 window 中打印斐波那契数列。简单地说,我只希望每个下一个数字都从最后一个数字结束的列开始。这样我就可以达到这样的效果:

为此我使用了这样的代码:

<?php

list($a, $b) = [0,1];
$sp=0;

while (true) {
    if ((int)$a < 0) {     
        break;
    }
    else {
        for ($i=0; $i < $sp; $i++) {
            echo("&nbsp;");
        }
        echo ("$a<br>");
        // don't understand why double amount of spaces needed
        $sp += 2 * strlen($a);        
        list($a, $b) = [$b, $a+$b];        
    }
}

问题是 - 为什么我需要 两倍 的空白空间作为最后一个数字的长度?

那是因为默认的浏览器字体不是单色space字体,spaces大约取水平space的一半为数字。

<pre> 标签(暗示单色space 字体)中试试,您会发现不同之处:

<?php

list($a, $b) = [0,1];
$sp=0;

echo  "<pre>";

foreach (range(0,20) as $n) {
    if ((int)$a < 0) {     
        break;
    }
    else {
        for ($i=0; $i < $sp; $i++) {
            echo("&nbsp;");
        }
        echo ("$a<br>");
        // don't understand why double amount of spaces needed
        $sp += 2 * strlen($a);        
        list($a, $b) = [$b, $a+$b];        
    }
}

echo  "</pre>";

?>

当你运行上面的代码时,输​​出的每一行都会有太多的space,所以现在你需要删除2 *以使其正确对齐。