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

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

мой код довольно прост, но я просто не могу найти правильный способ сделать это:

foreach ($this->sinonimo as $s){ 

echo '<span>'.ucfirst($s->sinonimo).',</span>';

}

заранее спасибо за любую помощь :)

8 ответов


ставим свои значения в массив, а потом 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() функция on


использовать substr () функции

поместите последнюю строку в substr () функции

 $string = "";
    while ($row = mysql_fetch_array($result)) {
      $string .= $name . ', ';
    }
    echo substr($string, 0, strlen($string) - 2);

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

Как сообщение имеет много категорий.

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

вы можете использовать функцию TRIM. Предположим, ваша строка такова

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

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

echo trim($str, ",");

и вывода

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