Удаление последней запятой из цикла foreach

Я использую цикл 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 и новее.

В качестве альтернативы ответом @ 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>"; 

Это не требует дополнительного массива. Он работает, сначала распечатывая первый элемент, затем в цикле печатает промежуточный сегмент, за которым следует следующий элемент, а затем закрывает все с конечным сегментом.

Laravel имеет функцию implode() аналогичную функции php implode() .

Вы должны использовать функцию implode() для объекта Collection :

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

вывод будет примерно таким:

 Hello world!, First post, Second post 

Laravel implode () для реляционных данных.

Как и почта, есть много категорий.

 $user->posts->implode('categories.name', ', '); // In loop {{ $post->categories->name }} 

u можно использовать функция триммера. предположим, что ваша строка подобна этой

 $str=1,2,3,4,5,6,7,8, 

вы можете попробовать это

 echo trim($str, ","); 

и выход

 1,2,3,4,5,6,7,8