我使用foreach循环从数据库中回显一些值,如果这有意义的话,我需要从最后一个循环中去掉最后一个逗号。

我的循环很简单,如下所示

foreach($results as $result){
echo $result->name.',';
}

发出回声

result,result,result,result,

我只需要去掉最后那个讨厌的逗号。

任何帮助都很好:)

干杯

有人最终注意到我的错误,真的需要5票赞成吗…?

学着使用模板,伙计。

更好的:

$resultstr = array();
foreach ($results as $result) {
$resultstr[] = $result->name;
}
echo implode(",",$resultstr);

+1这显然是解决这一问题的正确方法。应该是公认的答案。

它可以工作,但它会在逗号之前生成空格吗?

@Mufaddal_mw不应该这样做,除非空白空间是$result->name的一部分(或者你在那里写的任何内容)。请随意查阅有关内爆语义的PHP文档。

1。但在大concat添加|弦乐

$s = '';
foreach ($results as $result) {
if ($s) $s .= '|';
$s .= $result;
}
echo $s;
demo

2。如果没有最后的项目|只有回声

$s = '';
$n = count($results);
foreach ($results as $i => $result) {
$s .= $result;
if (($i+1) != $n) $s .= '|';
}
echo $s;
demo

3。然后,implode load大阵列

$s = array();
foreach ($results as $result) {
$s[] = $result;
}
echo implode('|', $s);
demo

4。然后把最后的弦乐concat大|(或rtrim它)

$s = '';
foreach ($results as $result) {
$s .= $result . '|';
}
echo substr($s, 0, -1);
# echo rtrim($s, '|');
demo

5。使用array_map()concat弦乐

echo implode('|', array_map(function($result) { return $result; }, $results));
demo
$result_names = '';
foreach($results as $result){
$result_names .= $result->name.',';
}
echo rtrim($result_names, ',');

这会杀死循环中的所有逗号,不是吗?…不仅仅是输出字符串的最后一个?

当我意识到你在循环中回响后,我编辑了这段代码。

我已经与本期有相同类似的问题最近。我使用它由固定的安全increment美元,它initializing 0,然后在它里面的foreach increment环。在别的地方,如果环安全,包括回声,与该项声明的是我用逗号,如果不counter美元的sizeof(煤)的阵列/操作员的变量。

我不知道如果这会解决你的问题本身,但它帮助我与我的。这个问题是我realize年-老了,但这将帮助hopefully的别的。我在相当大的新的PHP,所以我不完全明白很多的答案,我是在给定的,虽然他们是相当insightful implode,特别的一个。

$i=0;
foreach ($results as $result) {
$i++;
if(sizeof($results) > $i) {
echo $result .",";
} else {
echo $result;
}
}
$string ="";
while ($row = mysql_fetch_array($result)) {
$string .= $name . ', ';
}
echo substr($string, 0, strlen($string) - 2);

不是因为漂亮,但也的作品:

$first=true;
foreach($results as $result){
if(!$first) { echo ', '; }
$first=false;
echo $result->name;
}

这只会在第一项中省略逗号。问题是关于最后一项。

$arraySize = count($results);
for($i=0; $i
{
$comma = ($i
echo $results[$i]->name.$comma;
}
$i = 1;
$count = count( $results );
foreach( $results as $result ) {
echo $result->name;
if ( $i < $count ) echo",";
++$i;
}
?>

很容易与end($array)这里:

foreach($results as $result){
echo $result->name . (end($results) ? '' : ',');
}

参考这里。

另一个聪明的方法是:

foreach($results as $result){
echo ($passed ? ',' : '') . $result->name;
$passed = true;
}

在这种情况下,在第一环$passed是NULL和,不打印。

$return = array(any array)
$len = count($return);
$str = '';
$i = 1;
foreach($return as $key=>$value)
{
$str .= ''.$value['cat_title'].'';
if($len > $i)
{
$str .= ',';
$i = $i+1;
}
}
echo $str;
?>
$a[0] = 'John Doe';
$a[1] = 'Jason statham';
$a[2] = 'Thomas Anderson';
$size = count($a);
foreach($a as $key=>$name){
$result .= $name;
if($size > $key+1) $result .=', ';
}
echo $result;

如果数组没有数字索引怎么办?

描述你在做什么是个好主意,发布代码只会让人很困惑。

欢迎使用StackOverflow。考虑对您提供的任何代码提供解释。这将允许提问者从你的例子中学习。请参阅有关编写好答案的常见问题解答。

我要做这个,因为我总是阿洛特试图在jplot饲料数量大,我发现其容易的在前面用逗号把名人像比环:

foreach($arrayitem as $k){ $string =  $string.",".$k;
}

然后快点把第一个字符(用逗号substr的helps)使用它,如果你知道一个guestimate的弦乐将是长的,我不知道什么是对的limit substr最大特点。

echo substr($a,1,10000000);

希望这helps。

第一个得到所有的输出由buffering输出使用。然后,用逗号和显示它的装饰。所以,因为它像这样:

ob_start();
foreach($results as $result)
{
echo $result->name.',';
}
$output = ob_get_clean();
echo rtrim($output, ',');

如果该方法的输出buffering helps环是非常大的(在这里是posting和柯博文,只为brevity),然后使用ob是容易变化的研究internals无环。

不需要OB,只需要建立一个字符串,修剪然后回音。

@BoltClock:是的,但是如果内部循环非常大(并且OP在这里发布只是为了简洁),那么在不更改内部循环的情况下使用OB就更容易了。谢谢你的+1。

@上校,谢谢你的赞赏。当循环中有数百个loc和许多echo语句时,ob是一个简单的快速修复方法。

@上校,"你们"是什么意思?