如何在PHP中创build逗号分隔列表中的数组?

我知道如何使用foreach循环访问数组中的项,并附加一个逗号,但总是不得不摘掉最终的逗号。 有一个简单的PHP方法来做到这一点?

$fruit = array('apple', 'banana', 'pear', 'grape'); 

最终我想要

 $result = "apple, banana, pear, grape" 

你想用这个implode 。

即: $commaList = implode(', ', $fruit);


有一种方法可以附加逗号而不需要拖尾。 如果你必须同时做一些其他的操作,你会想这样做。 例如,也许你想引用每个水果,然后用逗号分隔它们:

 $prefix = $fruitList = ''; foreach ($fruits as $fruit) { $fruitList .= $prefix . '"' . $fruit . '"'; $prefix = ', '; } 

另外,如果你只是在每个项目之后添加一个逗号的“正常”方法(就像你以前所做的那样),并且你需要修剪最后一个,只要执行$list = rtrim($list, ', ') 。 在这种情况下,我看到很多人不必要地使用substr

这就是我一直在做的事情:

 $arr = array(1,2,3,4,5,6,7,8,9); $string = rtrim(implode(',', $arr), ','); echo $string; 

输出:

 1,2,3,4,5,6,7,8,9 

现场演示: http : //ideone.com/EWK1XR

编辑: Per @ joseantgv的评论,你应该能够从上面的例子中删除rtrim() 。 即:

 $string = implode(',', $arr); 

对于想要结果的开发者来说,最终可以使用下面的代码:

 $titleString = array('apple', 'banana', 'pear', 'grape'); $totalTitles = count($titleString); if($totalTitles>1) { $titleString = implode(', ' , array_slice($titleString,0,$totalTitles-1)) . ' and ' . end($titleString); } else { $titleString = implode(', ' , $titleString); } echo $titleString; // apple, banana, pear and grape 

我更喜欢在FOR循环中使用IF语句来检查当前迭代是否不是数组中的最后一个值。 如果不是,请添加逗号

 $fruit = array("apple", "banana", "pear", "grape"); for($i = 0; $i < count($fruit); $i++){ echo "$fruit[$i]"; if($i < (count($fruit) -1)){ echo ", "; } } 

与劳埃德的答案类似,但与任何大小的数组一起工作。

 $missing = array(); $missing[] = 'name'; $missing[] = 'zipcode'; $missing[] = 'phone'; if( is_array($missing) && count($missing) > 0 ) { $result = ''; $total = count($missing) - 1; for($i = 0; $i <= $total; $i++) { if($i == $total && $total > 0) $result .= "and "; $result .= $missing[$i]; if($i < $total) $result .= ", "; } echo 'You need to provide your '.$result.'.'; // Echos "You need to provide your name, zipcode, and phone." } 

有时甚至在某些情况下甚至不需要php(例如,列表项在渲染中都是在它们自己的通用标记中)。如果在呈现之后它们是单独的元素,则可以始终向所有元素添加逗号,但通过css添加最后一个子元素从脚本。

我在骨干应用程序中使用了很多,实际上是为了修改一些任意的代码fat:

 .likers a:not(:last-child):after { content: ","; } 

基本上看元素,除了最后一个元素之外都是针对所有元素,在每个元素之后添加一个逗号。 如果情况适用的话,只需一种替代方法就不必使用脚本。

function性解决scheme将如下所示:

 $fruit = array('apple', 'banana', 'pear', 'grape'); $sep = ','; array_reduce( $fruits, function($fruitsStr, $fruit) use ($sep) { return (('' == $fruitsStr) ? $fruit : $fruitsStr . $sep . $fruit); }, '' ); 
 $fruit = array('apple', 'banana', 'pear', 'grape'); $commasaprated = implode(',' , $fruit); 

如果做引用的答案,你可以做

 $commaList = '"'.implode( '" , " ', $fruit). '"'; 

上面假定水果是非空的。 如果你不想做这个假设,你可以使用if-then-else语句或三元(?:)运算符。

另一种方式可能是这样的:

 $letters = array("a", "b", "c", "d", "e", "f", "g"); $result = substr(implode(", ", $letters), 0, -3); 

$result输出是一个格式良好的以逗号分隔的列表。

 a, b, c, d, e, f, g 
 $letters = array("a", "b", "c", "d", "e", "f", "g"); // this array can n no. of values $result = substr(implode(", ", $letters), 0); echo $result 

输出→a,b,c,d,e,f,g