Как сохранить выходной отступ? - PullRequest
2 голосов
/ 10 сентября 2011

У меня есть некоторый PHP-код, подобный следующему (упрощенный):

<ul>
    <?php
        for ($Index = 1; $Index <= 10; $Index++)
        {
            echo("<li>" . $Index . "</li>\n");
        }
    ?>
</ul>

Проблема в том, что для всех строк после первой вывод без отступа.Я хочу, чтобы мой код был аккуратным, поэтому я бы хотел, чтобы все элементы <li> были правильно выровнены.

Я пытался выводить вкладки перед каждым элементом с \t, но затем первая строка имеет отступчем предполагалось.Вывод вкладки после означает, что конечное размещение </ul> будет испорчено.

\r не работает вообще.

Есть ли какие-либохитрости в поддержании правильного форматирования вывода, или мне приходится жить с грязным кодом?

Ответы [ 2 ]

2 голосов
/ 10 сентября 2011

Первая строка имеет больший отступ, чем вы хотите, из-за лишних пробелов в начале этой строки:

    <?php

Поскольку этот пробел находится вне тегов PHP, он выводится напрямую. Но поскольку он находится вне тегов PHP, он не включен в цикл и повлияет только на первую строку.

Вы можете сделать это, чтобы избежать этого:

<ul>
<?php
  for ($Index = 1; $Index <= 10; $Index++) {
    echo "\n    <li>$Index</li>";
  }
?>
</ul>

... и выровняйте теги <?php ?> в начале строк, или вы можете сделать это:

<ul><?php for ($Index = 1; $Index <= 10; $Index++) { ?>
    <li><?php echo $Index; ?></li>
<?php } ?></ul>

... но, как бы нелепо это ни звучало, это:

<ul><?php for ($Index = 1; $Index <= 10; $Index++) echo "\n    <li>$Index</li>"; ?>
</ul>

... вероятно, это лучший способ добиться того, о чем вы говорите, оставляя наименьшее пространство для неопределенности (разные версии PHP, кажется, обрабатывают это немного по-разному - например, в PHP 4.3.10, по крайней мере, есть неявная строка перерыв после тега ?>, которого нет в PHP 5 (я думаю, что это могло быть ошибкой). Это одна из причин, по которой я не использую смешанный HTML и PHP (хотя я знаю, что многие люди не согласны со мной в это точка), но я бы предпочел сделать следующее:

<?php

  $out = "<ul>\n";
  for ($Index = 1; $Index <= 10; $Index++) $out .= "    <li>$Index</li>\n";
  $out .= "</ul>";
  echo $out;

?>
0 голосов
/ 10 сентября 2011

Используйте пробелы. "" * 8, 16, 20 и т. Д. ...

Или все еще используйте \t в вашем php, затем в самом конце выведите все это после замены \t пробелами ,

echo preg_replace('/^\t/', '4_SPACES_HERE', $output_html);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...