Я пытаюсь напечатать последовательность Фибоначчи в окне браузера с помощью PHP. Просто я просто хочу, чтобы каждый следующий номер начинался со столбца, где заканчивался последний номер. Чтобы я мог добиться такого эффекта:
Для этого эффекта я использовал такой код:
<?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];
}
}
Вопрос — зачем мне дважды столько пустых мест, сколько длина последнего номера?
Это связано с тем, что шрифт браузера по умолчанию не является моноширинным шрифтом, а пробелы занимают около половины горизонтального пространства в виде цифр.
Попробуйте в течение <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 *
чтобы он выровнялся правильно.
Других решений пока нет …