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

时间:2017-03-25 10:31:13

标签: php fibonacci

我试图用PHP在浏览器窗口中打印Fibonacci序列。我只想让每个下一个数字从最后一个数字结束的列开始。这样我就可以达到这样的效果:

enter image description here

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

<?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];        
    }
}

问题是 - 为什么我需要两次与最后一个数字长度一样多的空格?

1 个答案:

答案 0 :(得分:1)

这是因为默认浏览器字体不是等宽字体,空格占水平空间的一半左右。

<pre>标记内(这意味着使用等宽字体)进行尝试,您会注意到差异:

<?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>";

?>

运行上面的代码时,每行输出的空间太大,所以现在需要删除2 *以使其正确对齐。