Удаление последней запятой из цикла foreach
Im, использующий цикл foreach, чтобы вывести некоторые значения из моей базы данных и разделять их по запятым, но я не знаю, как удалить последнюю запятую, которую он добавляет по последнему значению.
Мой код довольно прост, но я просто не могу найти правильный способ сделать это:
foreach ($this->sinonimo as $s){
echo '<span>'.ucfirst($s->sinonimo).',</span>';
}
Заранее благодарим за любую помощь:)
Ответы
Ответ 1
Поместите свои значения в массив, а затем 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>
Ответ 2
Другой подход для вашего кода будет немного логическим:
hasComma = false;
foreach ($this->sinonimo as $s){
if (hasComma){
echo ",";
}
echo '<span>'.ucfirst($s->sinonimo).'</span>';
hasComma=true;
}
Ответ 3
Обычно я стараюсь избегать добавления логики для таких случаев использования. Лучший способ - хранить значения в массиве и вставлять их в запятую.
Однако вы можете добавить запятые CSS, что намного проще.
Ваш красивый и чистый цикл:
foreach($collection->object as $data)
{
echo "<span>" . $data->var . "</span>";
}
И для CSS:
.selector span:after {
content: ",";
}
.selector span:last-child:after {
content: "";
}
Это работает для всех основных браузеров, включая IE8 и новее.
Ответ 4
В качестве альтернативы ответу @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>";
Это не требует дополнительного массива. Он работает, сначала печатая первый элемент, затем в цикле печатает промежуточный сегмент, за которым следует следующий элемент, а затем закрывает все с помощью конечного сегмента.
Ответ 5
Laravel имеет функцию implode()
, такую же, как php implode()
.
Вы должны использовать функцию implode()
для объекта Collection
:
$user->posts->implode('title', ', ');
вывод будет примерно таким:
Hello world!, First post, Second post
Ответ 6
Функция Laravel implode() для реляционных данных.
Как и почта, есть много категорий.
$user->posts->implode('categories.name', ', '); // In loop {{ $post->categories->name }}
Ответ 7
u может использовать функцию триммера.
предположим, что ваша строка похожа на это
$str=1,2,3,4,5,6,7,8,
u может попробовать это
echo trim($str, ",");
а выход -
1,2,3,4,5,6,7,8