2012-07-09 31 views
2

我很确定我在这里或其他地方找不到答案,或者因为它是我的错,无法提出正确的问题,但无论如何,说我有for循环我的PHP是这样的:在PHP for-loop输出格式好的HTML格式

for($i=0; $i<3; $i++){ 
echo "<a href=\"\">$i</a> | "; 
} 

如何让我最后一次呼吁“|”不出现,才能有一个很好的输出:

<a href="">0</a> | <a href="">1</a> | <a href="">2</a> 

INSTEAD OF

<a href="">0</a> | <a href="">1</a> | <a href="">2</a> | <-- remove this! :(

你们很棒!谢谢!!!

如果$ i < $ undefinedNumber?

回答

1
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>" 
} 
+0

TQ帮助! – 2012-07-09 16:38:55

1
for($i=0; $i<3; $i++) { 
    if ($i == 0) { 
     echo "<a href=\"\">$i</a>; 
    } 
    else { 
     echo " | <a href=\"\">$i</a>" 
    } 
} 
+0

TQ帮助! – 2012-07-09 16:39:49

1

所以你只需要从出最后一棒?循环播放时为什么不跳过它?类似这样的:

for($i=0; $i<3; $i++) 
{ 
    echo "<a href=\"\">$i</a>"; 

    if($i < 2) 
     echo "|"; 
} 

这将确保该栏只在前两个链接之后显示,而不是在第三个之后显示。

1
$output=array(); 
for($i=0; $i<3; $i++){ 
    $output[]="<a href=\"\">$i</a>"; 
} 
$ouput=implode(' | ', $ouput); 
+0

TQ帮助! – 2012-07-09 16:39:40

1
$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))); 
+0

TQ帮助! – 2012-07-09 16:39:19

1

你也可以这样做:

for($i=0; $i<3; $i++) { 
    $arr[] = "<a href=\"\">$i</a>"; 
} 
echo implode(' | ',$arr); 
+0

你们很棒!谢谢!!!如果$ i <$ undefinedNumber? – 2012-07-09 16:35:21

+0

它仍然可以正常工作。 – 2012-07-09 16:36:33

2

保持流动,你只需要,如果它不是第一个:

for ($i = 0; $i < 3; $i++) { 
    echo $i ? " | " : '', "<a href=\"\">$i</a>"; 
} 

而对于第一个$i0这意味着它是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(Example) - 但是,将|添加到链接文本或样式(在至少在我测试它的铬,看起来越野车)。

+0

TQ帮助! – 2012-07-09 16:39:30

1

这是编程中常见的情况,称为特殊情况模式。没有内置在比使用if语句或ternary operator

for($i=0; $i<3; $i++){ 
    echo "<a href=\"\">$i</a>" . ($i != 2) ? " | " : ""; 
1

不这样做在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,这是正确的做法。

+0

我会记住这一点,这绝对是让人大开眼界的:) – 2012-07-09 16:48:07