【问题标题】:Output for loop with no whitespace between elements while avoiding CSS输出循环,元素之间没有空格,同时避免 CSS
【发布时间】:2018-11-11 14:03:13
【问题描述】:

我有以下 PHP:

<?php
    $items = array('foo', 'bar', 'baz', 'qux');
?> 

<div>
    <?php foreach ($items as $item): ?>
        <a><?= $item; ?></a>
    <?php endforeach; ?>
</div>

原始输出是这样的:

<div>
                <a>foo</a>
                <a>bar</a>
                <a>baz</a>
                <a>qux</a>
        </div>

它看起来很丑而且很乱,但这是实际的输出。不过,这并不困扰我。问题是&lt;a&gt; 标签之间有空格。在浏览器中,我得到了这个结果:

注意元素之间的空间。 我不想这样。


我知道你可以使用font-sizeletter-spacing 等来避免这个问题,但我不想这样做,因为问题出在标记中。

我也尝试像这样注释掉空格:

    <div><!--
        <?php foreach ($items as $item): ?>
         --><a><?= $item; ?></a><!--
        <?php endforeach; ?>
 --></div>

产生以下输出:

    <div><!--
                 --><a>foo</a><!--
                 --><a>bar</a><!--
                 --><a>baz</a><!--
                 --><a>qux</a><!--
         --></div>

结果如下:

这是我想要的结果,是的,但是这种注释技术是可笑的......它还搞砸了语法突出显示:


问题

有没有一种合法的方法可以在不使用 CSS 或俗气的评论的情况下删除元素之间的空格?

编辑:我使用这样的简单标记只是为了问题的简单性。当我在 for 循环中有很多元素时,最好的方法是什么,而不仅仅是 &lt;a&gt; 标签,而使用 echo 会很困难? IE。您在哪里需要关闭 PHP 并使用速记 &lt;?= ?&gt; 标签?

【问题讨论】:

  • 忘记这条评论
  • 我不同意你认为问题出在标记上的观点;问题在于演示文稿,因此 css 将是解决该问题的最合乎逻辑的解决方案。使用a { display: inline-block; } 之类的东西可以解决您的问题。
  • 我同意,是的。但是为了简单起见,我使用了如此简单的标记(检查我的编辑)。当我有一个更复杂的结构并且使用 CSS 会很困难时,我会怎么做?我可能正在寻找一些神奇的 PHP 函数。只是从输出中去除空格的东西。
  • 生成的 html 结构越复杂,使用 css 解决它而不是格式化源代码以匹配所需的输出就越有意义:-)
  • 老实说,更改代码格式永远不会改变代码的行为方式。

标签: php whitespace removing-whitespace


【解决方案1】:

你可以使用下面的代码,

<div>
    <?php foreach ($items as $item): ?><a><?= $item; ?></a><?php endforeach; ?>
</div>

【讨论】:

    【解决方案2】:

    您可以使用以下任何代码来删除锚标记之间的空格

    <div>
        <?php foreach ($items as $item){ ?><a><?= $item; ?></a><?php } ?>
    </div>
    

    或者

    <div>
        <?php foreach ($items as $item): ?><a><?= $item; ?></a><?php endforeach; ?>
    </div>
    

    或者

    <div>
        <?php 
          foreach ($items as $item){
            echo "<a>$item</a>";
         } ?>
    </div>
    

    问题是:您说 php 输出 1 lineyour text 但 php 将空格(包括换行符)最小化为单个空格,直到 css 或 @987654327 明确表示@标签。

    【讨论】:

      【解决方案3】:

      我刚刚发现您可以使用output buffering,然后使用正则表达式去除空格:

      <?php ob_start(); ?>
      
      <ul>
          <li>foo </li>
          <li>b ar</li>
          <li> b a z </li>
      </ul>
      
      <?= preg_replace("/>(\s+)</", '><', ob_get_clean()) ?>
      

      输出被捕获,然后传递给preg_replace()。然后,正则表达式匹配标签之间所有出现的空白 only,即&gt;&lt;。很酷的是,当有文本时它不会删除空格。所以上面的输出变成了:

      <ul><li>foo </li><li>b ar</li><li> b a z </li></ul>
      

      元素之间没有空格,但保留了元素内部的空格。

      不确定使用正则表达式处理大量内容是否是个好主意,但仍然......这似乎是一个非常优雅的解决方案。

      【讨论】:

        猜你喜欢
        • 2017-08-21
        • 1970-01-01
        • 2020-11-17
        • 1970-01-01
        • 2011-10-20
        • 1970-01-01
        • 1970-01-01
        • 2017-10-04
        • 1970-01-01
        相关资源
        最近更新 更多