我试图用PHP在浏览器窗口中打印Fibonacci序列。我只想让每个下一个数字从最后一个数字结束的列开始。这样我就可以达到这样的效果:
为此,我使用了这样的代码:
<?php
list($a, $b) = [0,1];
$sp=0;
while (true) {
if ((int)$a < 0) {
break;
}
else {
for ($i=0; $i < $sp; $i++) {
echo(" ");
}
echo ("$a<br>");
// don't understand why double amount of spaces needed
$sp += 2 * strlen($a);
list($a, $b) = [$b, $a+$b];
}
}
问题是 - 为什么我需要两次与最后一个数字长度一样多的空格?
答案 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(" ");
}
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 *
以使其正确对齐。