2

ここでも他の場所でも答えが見つからなかったと確信しています。あるいは、正しい質問をすることができないのは私のせいかもしれませんが、とにかく、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 の場合はどうなりますか?

4

9 に答える 9

2

流れを維持してください。それが最初ではない場合にのみ必要です。

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 をいじるよりも簡単に統合できる場合があります ( Example ) |

于 2012-07-09T16:35:18.213 に答える
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:"";
}

HTMLをphpでスタイル設定しないでください。これが正しい方法です。

于 2012-07-09T16:40:28.743 に答える
1

これは、スペシャル ケース パターンとして知られる、プログラミングでよく見られる状況です。if ステートメントまたは三項演算子を使用する以外に、これを解決する組み込みの方法はありません。

for($i=0; $i<3; $i++){
    echo "<a href=\"\">$i</a>" . ($i != 2) ? " | " : "";
于 2012-07-09T16:39:29.320 に答える
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>"
}
于 2012-07-09T16:28:52.560 に答える
1
for($i=0; $i<3; $i++) {
    if ($i == 0) {
       echo "<a href=\"\">$i</a>;
    }
    else {
       echo " | <a href=\"\">$i</a>"
    }
}
于 2012-07-09T16:30:53.490 に答える
1

では、出力から最後のバーを削除するだけでよいのでしょうか? ループするときにスキップしてみませんか?このようなもの:

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

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

これにより、バーが最初の 2 つのリンクの後にのみ表示され、3 つ目のリンクの後には表示されなくなります。

于 2012-07-09T16:32:01.883 に答える
1
$output=array();
for($i=0; $i<3; $i++){
    $output[]="<a href=\"\">$i</a>";
}
$ouput=implode(' | ', $ouput);
于 2012-07-09T16:32:09.253 に答える
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)));
于 2012-07-09T16:32:33.207 に答える
1

これを行うこともできます:

for($i=0; $i<3; $i++) {
    $arr[] = "<a href=\"\">$i</a>";
}
echo implode(' | ',$arr);
于 2012-07-09T16:34:13.483 に答える