在最后一个结束后打印每个数字的空白空间量
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(" ");
}
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(" ");
}
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 *
以使其正确对齐。
我正在尝试使用 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(" ");
}
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(" ");
}
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 *
以使其正确对齐。