我有以下代码:
<ul>
<?php foreach($users as $user){ ?>
<li>
<?php echo $user->name ?>
</li>
<?php } ?>
</ul>
它呈现:
<ul>
</ul>
当有$users
时,一切正常。但是,如果没有,<ul>
将在其中显示空格,使其不能归因于CSS选择器:empty
。
我设法解决了这个问题:
<ul><?php foreach($users as $user){ ?>
<li>
<?php echo $user->name ?>
</li>
<?php } ?></ul>
它呈现:
<ul></ul>
如果代码中没有类似的中断,列表现在是空的(即使是空的空格),但我不敢这样离开,其他程序员修复缩进并打破它。
有没有办法在代码中添加换行符而不向渲染的html元素添加空格或中断?
答案 0 :(得分:2)
我的问题是:有没有办法在代码中添加换行符而不向渲染的html元素添加空格或中断?
您可以使用HTML评论
<ul><!--
<?php foreach($users as $user){ ?>
--><li><!-- …
如果您希望保持HTML代码的可读性,这种技术也会用于fight the space between inline block elements。
或者您当然可以使用输出缓冲,然后在将输出返回给客户端之前替换这些空格(如果您想正确执行,则相当复杂。)
可能是解决实际问题的最简单方法:
如果没有任何列表项,为什么要输出ul
元素呢?
使用if
围绕整个块,检查数组包含多少元素 - 如果没有,则不输出任何内容。
答案 1 :(得分:1)
之前做一个测试:
<?php if (isset($users) && count($users) > 0){ ?>
<ul>
<?php foreach($users as $user){ ?>
<li>
<?php echo $user->name ?>
</li>
<?php } ?>
</ul>
<?php } ?>
这样,如果没有用户,则不会创建<ul>
,因此没有空格。
答案 2 :(得分:0)
不要删除你的php语句:
<ul>
<?php foreach($users as $user){ ?>
<li>
<?php echo $user->name ?>
</li>
<?php } ?>
</ul>
PHP将删除从<?php
开始到?>
结束的所有内容,包括换行符。这是在打开php标记之前留下的标签。
答案 3 :(得分:0)
您可以使用以下方式进入新行:
echo "\n" //this will break into a new line
但要注意你必须使用双引号。单引号不起作用:
echo '\n' //this will output \n
完整的解决方案将是
<ul>
<?php foreach($users as $user){ ?>
<li>
<?php echo $user->name ?>
</li>
<?php } echo "\n" ?></ul>
我测试了它的确有效。但是如果你担心未来的发展并且不清楚,我会使用
if(isset($users)){?>
<ul>
<?php foreach($users as $user){ ?>
<li>
<?php echo $user->name ?>
</li>
<?php } ?>
</ul>
<?php }else{ //comment explaining that this prevents CSS selector ?>
<ul></ul>
<?php } ?>
答案 4 :(得分:0)
我会用这种表示法:
<ul><?php
foreach($users as $user){
?><li><?php echo $user->name ?></li><?php
}
?></ul>
它仍然非常易读,HTML输出中不包含任何不需要的空格,$users
是否为空!