16

foreach ループを使用してデータベースからいくつかの値をエコーアウトし、それぞれをカンマで区切りますが、最後の値に追加された最後のカンマを削除する方法がわかりません。

私のコードは非常に単純ですが、これを行う正しい方法を見つけることができないようです:

foreach ($this->sinonimo as $s){ 

echo '<span>'.ucfirst($s->sinonimo).',</span>';

}

助けてくれてありがとう:)

4

9 に答える 9

33

値を配列に入れてから、implodeその配列をコンマ (+ クリーンにするためのスペース) で囲みます。

$myArray = array();
foreach ($this->sinonimo as $s){ 
    $myArray[] = '<span>'.ucfirst($s->sinonimo).'</span>';
}

echo implode( ', ', $myArray );

これにより、各値の間にコンマが挿入されますが、最後には挿入されません。また、この場合、コンマは次のようにスパンの外にあります。

<span>Text1<span>, <span>Text2<span>, <span>Text3<span>
于 2013-11-12T17:06:10.293 に答える
7

コードの別のアプローチは、少し論理的です。

hasComma = false;
foreach ($this->sinonimo as $s){ 
    if (hasComma){ 
        echo ","; 
    }
    echo '<span>'.ucfirst($s->sinonimo).'</span>';
    hasComma=true;
}
于 2013-11-12T17:15:25.610 に答える
7

通常、このようなユース ケースではロジックを追加しないようにします。最良の方法は、値を配列に格納し、コンマで内破することです。

ただし、はるかに簡単な CSS でカンマを追加できます。

あなたの素敵できれいなループ:

foreach($collection->object as $data)
{
    echo "<span>" . $data->var . "</span>";
}

CSS の場合:

.selector span:after {
    content: ",";
}
.selector span:last-child:after {
    content: "";
}

これは、IE8 以降を含むすべての主要なブラウザーで機能します。

于 2014-08-28T07:30:38.880 に答える
4

Laravel にはimplode()php と同じ機能がありますimplode()

オブジェクトに対してimplode()関数を使用する必要があります。Collection

$user->posts->implode('title', ', ');

出力は次のようになります。

Hello world!, First post, Second post
于 2015-08-23T10:27:45.670 に答える
3

@Sébastienの答えの代わりに、これを行うことができます:

echo "<span>".ucfirst($this->sinonimo[0]);
for($i = 1; $i < count($this->sinonimo); $i++) {
    echo "</span>, <span>" . ucfirst($this->sinonimo[$i]);
}
echo "</span>";

これには余分な配列は必要ありません。最初の要素を最初に印刷し、次に中間セグメントを印刷してから次の要素をループで印刷し、最後にすべてを閉じます。

于 2013-11-12T17:10:41.773 に答える