我使用foreach循环从我的数据库中回显出一些值,并用逗号分隔它们,但我不知道如何删除它在最后一个值上添加的最后一个逗号。
我的代码很简单,但我似乎无法找到正确的方法:
foreach ($this->sinonimo as $s){
echo '<span>'.ucfirst($s->sinonimo).',</span>';
}
提前感谢您的任何帮助:)
答案 0 :(得分:22)
将您的值放在一个数组中,然后使用逗号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>
答案 1 :(得分:6)
您的代码的另一种方法是有点逻辑:
hasComma = false;
foreach ($this->sinonimo as $s){
if (hasComma){
echo ",";
}
echo '<span>'.ucfirst($s->sinonimo).'</span>';
hasComma=true;
}
答案 2 :(得分:5)
我通常会尽量避免为这些用例添加逻辑。最好的方法是将值存储在数组中并用逗号进行内嵌。
但是,您可以通过CSS添加逗号更容易。
你干净整洁的循环:
foreach($collection->object as $data)
{
echo "<span>" . $data->var . "</span>";
}
对于CSS:
.selector span:after {
content: ",";
}
.selector span:last-child:after {
content: "";
}
这适用于所有主流浏览器,包括IE8和更新版本。
答案 3 :(得分: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>";
这不需要额外的数组。它首先打印第一个元素,然后在循环中打印中间段,然后是下一个元素,然后用结束段关闭所有内容。
答案 4 :(得分:3)
Laravel的implode()
功能与php implode()
相同。
您应该在implode()
对象上使用Collection
函数:
$user->posts->implode('title', ', ');
输出将是这样的:
Hello world!, First post, Second post
答案 5 :(得分:1)
$str=1,2,3,4,5,6,7,8,
你可以尝试这个
echo trim($str, ",");
,输出
1,2,3,4,5,6,7,8
答案 6 :(得分:1)
使用 substr()功能
将最后一个字符串放在 substr()函数
中 $string = "";
while ($row = mysql_fetch_array($result)) {
$string .= $name . ', ';
}
echo substr($string, 0, strlen($string) - 2);
答案 7 :(得分:0)
关系数据的Laravel implode()函数。
喜欢帖子有很多类别。
$user->posts->implode('categories.name', ', '); // In loop {{ $post->categories->name }}
答案 8 :(得分:0)
将分隔符视为值前的前缀,第一个预先设置为''(空字符串),然后在每个元素之后设置为',':
$s = '';
foreach ($names as $name) {
echo $s . $name;
$s = ', ';
}