找到foreach()循环的最后一个条目,内爆不起作用

时间:2010-12-19 09:43:14

标签: php foreach implode

我遍历我的数组以打印文章名称:

<?php
if ($articles) { 
    foreach($articles as $article) { 
        echo $article->name.", ";       
    } // end foreach article
} // end if has articles
?>

这显然会产生类似

的东西
Apple, Banana, Mango,

但我正在寻找:

Apple, Banana, Mango

我尝试了一些这样的内爆声明:

<?php
if ($articles) { 
    foreach($articles as $article) { 
        echo implode(", ", $article->name);     
    } // end foreach article
} // end if has articles
?>

<?php
if ($articles) { 
    echo implode(", ", $articles->article->name);       
} // end if has articles
?>

这些都不适合我。怎么做对了?谢谢提示!

5 个答案:

答案 0 :(得分:6)

您可以使用foreach将文章名称添加到数组中,然后implode()添加该名称数组。

<?php
if ($articles) { 
    $article_names = array();

    foreach($articles as $article) { 
        $article_names[] = $article->name;
    } // end foreach article

    echo implode(', ', $article_names);
} // end if has articles
?>

答案 1 :(得分:6)

更容易检查你的第一次循环迭代,在你的文本之前使用逗号并在第一次迭代时留下这个逗号:

<?php
if ($articles) { 
    $firstiteration = true:
    foreach($articles as $article) { 
        if(!$firstiteration){
            echo ", ";
        }
        $firstiteration = false;
        echo $article->name;       
    } // end foreach article
} // end if has articles
?>

另一个(在我的选择中更漂亮)可能是覆盖你的文章类的_toSting() - 方法:

...
function __toString(){
    return $this->name;
}
...

并简单地echo implode(", ",$articles)

答案 2 :(得分:3)

这是做你想做的更好的方法:

<?php
$string = '';
if ($articles) { 
    foreach($articles as $article) { 
        $string .= $article->name.", ";       
    }
}
$string = substr($string, 0, -2);
echo $string;
?>

答案 3 :(得分:0)

PHP有很多很好的数组函数,这对其中一个很有用。

$namesArray = array_map(function($x){return $x->name;}, $articles);
$string = implode(',' $namesArray);

OR

$first = true;
array_walk(function($x) use (&$first)
           {
               if(!$first) {echo ', ';} else{$first = false;}
               echo $x->name;
           }, $articles);

我也非常喜欢使用__toString函数的上述响应,但我想展示这些数组函数,因为我认为它们经常被用于支持或不必要的foreach循环。

答案 4 :(得分:0)

您可以使用trim功能删除最后一个逗号和空格。这是最简单的方式..

<?php
    if ($articles) { 
         foreach($articles as $article) { 
             echo trim(implode(", ", $article->name), ', '); 
         }
     }
?>