从foreach循环中删除最后一个逗号

17

我正在使用foreach循环从数据库中输出一些值,并用逗号将它们分隔开。我不知道如何去掉最后一个值后面添加的逗号。

我的代码非常简单,但我似乎找不到正确的方法:

foreach ($this->sinonimo as $s){ 
    echo '<span>'.ucfirst($s->sinonimo).',</span>';
}

相关(可能是重复的):如何在PHP中从数组创建逗号分隔列表? - VLAZ
9个回答

33
将您的值放入数组中,然后使用逗号(+空格以使其更清洁)将该数组合并:implode
$myArray = array();
foreach ($this->sinonimo as $s){ 
    $myArray[] = '<span>'.ucfirst($s->sinonimo).'</span>';
}

echo implode( ', ', $myArray );
这将在每个值之间放置逗号,但不包括最后一个。在这种情况下,逗号将在span的外面,如下所示:

这将在每个值之间放置逗号,但不包括最后一个。在这种情况下,逗号将在span的外面,如下所示:

<span>Text1<span>, <span>Text2<span>, <span>Text3<span>

太棒了,Sébastien!这对我帮助很大,你的方法让我轻松地看到了解决方案,真不敢相信我以前竟然没看出来。我需要更多年的经验呵呵呵。 - Victor York

9

你的代码还有另一种方法,就是运用一些逻辑:

hasComma = false;
foreach ($this->sinonimo as $s){ 
    if (hasComma){ 
        echo ","; 
    }
    echo '<span>'.ucfirst($s->sinonimo).'</span>';
    hasComma=true;
}

7

通常情况下,我会尽量避免为这种用例添加逻辑。最好的方法是将值存储在数组中,并使用逗号进行拼接。

但是,您可以通过 CSS 添加逗号,这更加容易。

您简洁明了的循环代码:

foreach($collection->object as $data)
{
    echo "<span>" . $data->var . "</span>";
}

而对于CSS:

.selector span:after {
    content: ",";
}
.selector span:last-child:after {
    content: "";
}

这适用于包括IE8及以上在内的所有主流浏览器。

6
将分隔符视为值的前缀,第一个分隔符预设为空字符串'',然后在每个元素后设置为', '。
$s = '';
foreach ($names as $name) {
    echo $s . $name;
    $s = ', ';
}

4

Laravel有一个与php中的implode()相同的函数。

您应该在Collection对象上使用implode()函数:

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

输出结果将类似于这样:
Hello world!, First post, Second post

3

除了@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>";

这个不需要额外的数组。它通过首先打印第一个元素,然后在循环中打印中间段后面跟着下一个元素,最后用结束段来关闭所有内容。


2

使用 substr() 函数

将最终字符串放入 substr() 函数中

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

0

Laravel implode()函数用于关联数据。

例如,帖子有许多类别。

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

0

你可以使用 trim 函数。假设你的字符串是这样的

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

你可以尝试这个

echo trim($str, ",");

输出结果为:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接