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