Php 正在查找foreach()循环的最后一个条目,内爆无效
我在数组中循环以打印文章名称:Php 正在查找foreach()循环的最后一个条目,内爆无效,php,foreach,implode,Php,Foreach,Implode,我在数组中循环以打印文章名称: <?php if ($articles) { foreach($articles as $article) { echo $article->name.", "; } // end foreach article } // end if has articles ?> 但我正在寻找: Apple, Banana, Mango 我试过这样的内爆声明: <?php if ($articles
<?php
if ($articles) {
foreach($articles as $article) {
echo $article->name.", ";
} // end foreach article
} // end if has articles
?>
但我正在寻找:
Apple, Banana, Mango
我试过这样的内爆声明:
<?php
if ($articles) {
foreach($articles as $article) {
echo implode(", ", $article->name);
} // end foreach article
} // end if has articles
?>
或
这些都不适合我。怎样才能把它做好?谢谢你的提示 您可以使用
foreach
将项目名称添加到数组中,然后infrade()
将项目名称添加到该名称数组中
<?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
?>
检查第一次循环迭代要容易得多,在文本前写上逗号,并在第一次迭代时保留逗号A:
<?php
if ($articles) {
$firstiteration = true:
foreach($articles as $article) {
if(!$firstiteration){
echo ", ";
}
$firstiteration = false;
echo $article->name;
} // end foreach article
} // end if has articles
?>
简单地说,
echo内爆(“,”,$articles)
这是做你想做的事情的更好方法:
<?php
$string = '';
if ($articles) {
foreach($articles as $article) {
$string .= $article->name.", ";
}
}
$string = substr($string, 0, -2);
echo $string;
?>
PHP有很多很好的数组函数,这对其中一个非常重要
$namesArray = array_map(function($x){return $x->name;}, $articles);
$string = implode(',' $namesArray);
或
我也非常喜欢上面对uu-toString函数的响应,但我想展示这些数组函数,因为我认为它们在赞成或不必要的foreach循环中经常使用不足。您可以使用trim函数删除最后一个逗号和空格。这是最简单的方法
<?php
if ($articles) {
foreach($articles as $article) {
echo trim(implode(", ", $article->name), ', ');
}
}
?>
您有两个选择:1。不要在不必要的地方使用OOP语法。在需要数组的地方使用数组,然后利用内爆()。2.查找最后一个条目。有近十几种方法。试着至少找一个。它看起来很难看。2个循环,其中只需要1个。@Col我只能看到一个循环。@sexyprout:他可能指的是内爆()
中的内部循环。(我还没有看到该函数的源代码,所以我不确定它是否是通过循环实现的。)@sexyprout如果将此代码包装到函数中,则连一个都看不到。这并不意味着这个函数可以用魔杖完成它的工作。更好或者不更好,但是非常好的一个+1在您的第一个代码片段中有一个小错误,echo$article->name.“,”代码>应该是echo$article->name
…其他小错误-将firstIteration设置为false应该发生在if块之外,否则它将永远不会运行,而不是检查第一次迭代,这是打破旧的常规for
循环的好地方。那些确实存在,你知道:)@Billy,只有当它是一个数字索引数组时才有效。您打算“手动”执行第一个操作,然后对其余元素进行迭代?+1用于显示数组映射-在这种情况下,我更喜欢toString/内爆组合或foreach循环,但每个人都应该知道这些数组函数(很多人不知道)@oezi array\u映射可以使用数组。以及内爆,这是OP的问题。@oezi我看不到你的+1;-)
<?php
$string = '';
if ($articles) {
foreach($articles as $article) {
$string .= $article->name.", ";
}
}
$string = substr($string, 0, -2);
echo $string;
?>
$namesArray = array_map(function($x){return $x->name;}, $articles);
$string = implode(',' $namesArray);
$first = true;
array_walk(function($x) use (&$first)
{
if(!$first) {echo ', ';} else{$first = false;}
echo $x->name;
}, $articles);
<?php
if ($articles) {
foreach($articles as $article) {
echo trim(implode(", ", $article->name), ', ');
}
}
?>