我很确定我在这里或其他地方找不到答案,或者可能是因为我的错无法提出正确的问题,但无论如何,假设我的 PHP 中有一个 for 循环
,如下所示:for($i=0; $i<3; $i++){
echo "<a href='"'">$i</a> | ";
}
我如何最后一次调用"|"不出现以获得良好的输出:
<a href="">0</a> | <a href="">1</a> | <a href="">2</a>
而不是
<a href="">0</a> | <a href="">1</a> | <a href="">2</a> | <-- remove this! :(
你们太棒了!谢谢!!!
如果$i <$undefinedNumber呢?
保持流程,只有当它不是第一个时,你才需要它:
for ($i = 0; $i < 3; $i++) {
echo $i ? " | " : '', "<a href='"'">$i</a>";
}
对于第一个$i
是0
这意味着它是false
.否则$i
是正整数,表示true
.
有时,找到另一种方法来描述问题有助于制定更简单的答案。而不是:
<a href="">0</a> | <a href="">1</a> | <a href="">2</a> | /* <-- remove this! :( */
就是这个问题:
/* :( remove this! --> */ | <a href="">0</a> | <a href="">1</a> | <a href="">2</a>
同样形式的解决方案也适用于 CSS:
a:not(:first-child):before {content: ' | '}
有时这比摆弄 PHP 和 HTML(示例(更容易集成 - 但是这会将|
添加到链接文本或样式中(至少在我测试它的 chrome 中,看起来有问题(。
for($i=0; $i<3; $i++){
echo "<a href='"'">$i</a>"
if ($i != 2) {
echo " | ";
}
}
或
echo "<a href='"'">0</a>";
for($i=1; $i<3; $i++){
echo " | <a href='"'">$i</a>"
}
for($i=0; $i<3; $i++) {
if ($i == 0) {
echo "<a href='"'">$i</a>;
}
else {
echo " | <a href='"'">$i</a>"
}
}
所以你只需要从输出中删除最后一根柱? 为什么不在循环时跳过它? 像这样:
for($i=0; $i<3; $i++)
{
echo "<a href='"'">$i</a>";
if($i < 2)
echo "|";
}
这将确保栏仅在前两个链接之后显示,而不是在第三个链接之后显示。
$output=array();
for($i=0; $i<3; $i++){
$output[]="<a href='"'">$i</a>";
}
$ouput=implode(' | ', $ouput);
你也可以这样做:
for($i=0; $i<3; $i++) {
$arr[] = "<a href='"'">$i</a>";
}
echo implode(' | ',$arr);
这是编程中常见的一种情况,称为特殊情况模式。除了使用 if 语句或三元运算符之外,没有内置的方法来解决这个问题
for($i=0; $i<3; $i++){
echo "<a href='"'">$i</a>" . ($i != 2) ? " | " : "";
不要在 php 中这样做,而是在样式表中这样做。
首先构建你的 HTML
<ul class="navlinks">
<?php foreach($links as $linkName => $linkUrl): ?>
<li><a href="<?php echo $linkUrl; ?>"><?php echo $linkName; ?></a></li>
<?php endforeach; ?>
</ul>
应用 CSS。
.navlinks > li:after
{
content:"<li>|</li>";
}
.navlinks > li:last-child:after
{
content:"";
}
你永远不应该用php来设置你的HTML样式,这是正确的方法。
$arr = array();
for ($i=0; i<3; i++)
$arr[] = "<a href=''>$i</a>";
echo implode(" | ",$arr);
更紧凑的版本:
echo implode(" | ", array_map(function($x){return "<a href=''>$x</a>";},range(1,3)));