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

我知道如何使用 foreach 循环遍历数组中的项并添加逗号,但是去掉最后一个逗号总是一件痛苦的事情。有没有一种简单的 PHP 实现方法?

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

Ultimately I want

$result = "apple, banana, pear, grape"
233511 次浏览

您需要使用 内爆进行此操作。

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


有一种方法可以在后面添加逗号而不用在后面添加逗号。如果你需要同时做其他操作的话,你会想这么做的。例如,您可能想引用每个水果,然后用逗号将它们全部分开:

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

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

我更喜欢在 FOR 循环中使用 IF 语句进行检查,以确保当前迭代不是数组中的最后一个值。如果没有,则添加逗号

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


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

我一直是这么做的:

$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

编辑: 按照@joseantgv 的注释,您应该能够从上面的例子中删除 rtrim(),即:

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

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

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

以上假设水果是非空的。如果您不想做这样的假设,那么可以使用 If-then-else 语句或三元(?:)操作员。

与劳埃德的答案相似,但适用于任何大小的数组。

$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 为所有元素添加逗号,除了最后一个子元素,如果它们是从脚本中渲染出来的独立元素的话。

实际上,我在主干应用程序中经常使用这种方法来削减一些随意编写的代码:

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

基本上查看元素,除了它的最后一个元素之外,所有的目标都是元素,并且在每个项目之后添加一个逗号。只是另一种方法,如果情况适用,根本不必使用脚本。

$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

结果与 and在最后:

$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
$fruit = array('apple', 'banana', 'pear', 'grape');
$commasaprated = implode(',' , $fruit);

功能性解决方案应该是这样的:

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


array_reduce(
$fruits,
function($fruitsStr, $fruit) use ($sep) {
return (('' == $fruitsStr) ? $fruit : $fruitsStr . $sep . $fruit);
},
''
);

跟着这个

$teacher_id = '';


for ($i = 0; $i < count($data['teacher_id']); $i++) {


$teacher_id .= $data['teacher_id'][$i].',';


}
$teacher_id = rtrim($teacher_id, ',');
echo $teacher_id; exit;