2012-07-09 32 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