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>
コードのもう1つのアプローチは、ビットロジックです。
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にはphpimplode()
と同じimplode()
関数があります。
Collection
オブジェクトでimplode()
関数を使用する必要があります。
$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>";
これには追加の配列は必要ありません。これは、最初に最初の要素を印刷し、次にループで中間セグメントを印刷し、次に次の要素を印刷し、最後のセグメントですべてを閉じることによって機能します。
uはトリム機能を使用できます。あなたの文字列がこのようなものだとしましょう
$str=1,2,3,4,5,6,7,8,
あなたはこれを試すことができます
echo trim($str, ",");
そして出力は
1,2,3,4,5,6,7,8
substr()関数を使用します
最終的な文字列をsubstr()関数に入れます
$string = "";
while ($row = mysql_fetch_array($result)) {
$string .= $name . ', ';
}
echo substr($string, 0, strlen($string) - 2);
リレーショナルデータ用のLaravelimplode()関数。
投稿のように多くのカテゴリがあります。
$user->posts->implode('categories.name', ', '); // In loop {{ $post->categories->name }}