我遍历我的数组以打印文章名称:
<?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
?>
这些都不适合我。怎么做对了?谢谢提示!
答案 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), ', ');
}
}
?>