24

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

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

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

呼应了

result,result,result,result,

我只需要杀死那个讨厌的最后一个逗号。

4

15 回答 15

114

更好的:

$resultstr = array();
foreach ($results as $result) {
  $resultstr[] = $result->name;
}
echo implode(",",$resultstr);
于 2011-01-16T14:23:23.537 回答
29

1. 连接到字符串但添加|之前

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

2.|仅在不是最后一项时才回显

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

3.加载到数组然后内爆

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

4. 连接到字符串然后最后剪切|(或rtrim它)

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

5.连接字符串使用array_map()

echo implode('|', array_map(function($result) { return $result->name; }, $results));
于 2014-10-26T13:03:15.580 回答
14
$result_names = '';
foreach($results as $result){
    $result_names .= $result->name.',';
}
echo rtrim($result_names, ',');
于 2011-01-16T14:17:08.743 回答
2

我最近对这个类似的问题也有同样的问题。我通过使用增量变量 $i 来修复它,将其初始化为 0,然后让它在 foreach 循环内递增。如果 $i 计数器小于数组/变量的 sizeof() 运算符,则在该循环中放置一个 if,否则,使用包含逗号的 echo 语句。

我不知道这本身是否能解决您的问题,但它对我的问题有所帮助。我意识到这个问题已有多年历史了,但希望这对其他人有所帮助。我对 PHP 还很陌生,所以我不太了解在我之前给出的很多答案,尽管它们很有见地,尤其是内爆答案。

$i=0;
foreach ($results as $result) {
    $i++;
    if(sizeof($results) > $i) {
        echo $result . ", ";
    } else {
        echo $result;
    }
}
于 2018-07-14T01:02:13.587 回答
2

在现代 PHP 中,array_column()将允许您在对象数组中隔离一列数据。

代码:(演示

$results = [
    (object)['name' => 'A'],
    (object)['name' => 'B'],
    (object)['name' => 'C']
];

echo implode(',', array_column($results, 'name'));

输出:

A,B,C

也就是说,由于您正在迭代一个结果集,那么通过CONCAT()在 sql 中调用一个函数可能会为您提供更好的服务,以便这些值已经加入到单值结果集中。

于 2020-09-13T02:50:08.020 回答
0
$arraySize = count($results);
for($i=0; $i<$arraySize; $i++)
{
  $comma = ($i<$arraySize) ? ", " : "";
  echo $results[$i]->name.$comma;
}
于 2012-05-29T03:05:16.470 回答
0

不那么漂亮,但也有效:

$first=true;
foreach($results as $result){
    if(!$first) { echo ', '; }
    $first=false;
    echo $result->name;
}
于 2015-08-18T19:01:54.930 回答
0

另一种聪明的方法是:

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

在这种情况下,第一个循环$passedNULL并且,不打印。

于 2018-02-24T16:30:58.463 回答
0

我知道这是一个旧线程,但这是最近出现的,我想我会分享我的替代,更清洁的处理方式,使用 next()。

$array = array("A thing", "A whatsit", "eighty flange oscillators");
          
foreach( $array as $value ){
    echo $value;
    $nxt = next($array);
    if($nxt) echo ", "; // commas between each item in the list
    else echo ". And that's it."; // no comma after the last item.
}

// outputs: 
// A thing, A whatsit, eighty flange oscillators. And that's it.

在这里玩

于 2021-02-15T16:57:10.543 回答
-1

我必须经常这样做,因为我总是试图将数字输入 jplot,我发现将逗号放在循环的前面更容易,如下所示:

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

然后使用 substr 去掉第一个字符(逗号),如果你知道你的字符串的长度会很有帮助,我不确定 substr max 字符的限制是什么。

 echo substr($a,1,10000000);

希望这可以帮助。

于 2012-05-13T15:44:30.383 回答
-1
$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;
于 2012-09-27T11:06:06.823 回答
-1
<?php
$return = array(any array)
$len = count($return);
$str = '';
$i = 1;
foreach($return as $key=>$value)
{
    $str .= '<a href='.$value['cat_url'].'>'.$value['cat_title'].'</a>';
    if($len > $i)
    {
        $str .= ',';
        $i = $i+1;
    }
}
echo $str;
?>
于 2017-04-24T09:49:37.237 回答
-1
<?php
$i = 1;
$count = count( $results );
foreach( $results as $result ) {
    echo $result->name;
    if ( $i < $count ) echo ", ";                               
    ++$i;
}
?>
于 2018-10-05T10:38:40.363 回答
-1

这是我通常做的,在项目之前而不是之后添加逗号,同时忽略第一个循环。

$i = 0;
$string = '';

foreach($array as $item){
    $string .= ($i++ ? ',' : '').$item;
}
于 2020-08-26T11:19:25.493 回答
-12

首先使用输出缓冲获取所有输出。然后,修剪逗号并显示它。所以,这样做:

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

echo rtrim($output, ',');

如果内部循环非常大(为了简洁起见,OP 在此处发布),则输出缓冲方法会有所帮助,那么在不更改循环内部结构的情况下使用 OB 会更容易。

于 2011-01-16T14:21:53.223 回答