foreach ループを使用してデータベースからいくつかの値をエコーアウトし、それぞれをカンマで区切りますが、最後の値に追加された最後のカンマを削除する方法がわかりません。
私のコードは非常に単純ですが、これを行う正しい方法を見つけることができないようです:
foreach ($this->sinonimo as $s){
echo '<span>'.ucfirst($s->sinonimo).',</span>';
}
助けてくれてありがとう:)
値を配列に入れてから、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>
コードの別のアプローチは、少し論理的です。
hasComma = false;
foreach ($this->sinonimo as $s){
if (hasComma){
echo ",";
}
echo '<span>'.ucfirst($s->sinonimo).'</span>';
hasComma=true;
}
通常、このようなユース ケースではロジックを追加しないようにします。最良の方法は、値を配列に格納し、コンマで内破することです。
ただし、はるかに簡単な CSS でカンマを追加できます。
あなたの素敵できれいなループ:
foreach($collection->object as $data)
{
echo "<span>" . $data->var . "</span>";
}
CSS の場合:
.selector span:after {
content: ",";
}
.selector span:last-child:after {
content: "";
}
これは、IE8 以降を含むすべての主要なブラウザーで機能します。
Laravel にはimplode()
php と同じ機能がありますimplode()
。
オブジェクトに対してimplode()
関数を使用する必要があります。Collection
$user->posts->implode('title', ', ');
出力は次のようになります。
Hello world!, First post, Second post
@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>";
これには余分な配列は必要ありません。最初の要素を最初に印刷し、次に中間セグメントを印刷してから次の要素をループで印刷し、最後にすべてを閉じます。