Удаление последней запятой из цикла 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