如何保留输出缩进?

时间:2011-09-09 22:38:11

标签: php formatting tabs echo

我有一些PHP代码,如下所示(简化):

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

问题是对于第一个之后的所有行,输出没有缩进。我想保持我的代码整洁,所以我希望所有<li>元素都能正确对齐。

我尝试使用\t在每个元素之前输出制表符,但是第一行缩进超过预期。在元素之后输出标签意味着尾随</ul>的展示位置将被搞砸。

\r根本不起作用。

是否有任何技巧可以保持输出格式正确,或者我是否需要使用乱码?

2 个答案:

答案 0 :(得分:2)

由于此行开头有额外的空格,第一行比您想要的更加缩进:

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

?>

答案 1 :(得分:0)

使用空格。 “”* 8,16,20等...

或者仍然在你的php中使用\t,然后在用空格\t替换之后将其全部回显,

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