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

时间:2010-03-12 19:23:35

标签: php arrays

我知道如何使用foreach循环遍历数组的项目并附加逗号,但总是很难取下最后一个逗号。有一种简单的PHP方式吗?

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

最终我想要

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

12 个答案:

答案 0 :(得分:208)

您希望使用implode

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


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

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

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

答案 1 :(得分:35)

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

$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);

答案 2 :(得分:4)

对于最终想要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

答案 3 :(得分:3)

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

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

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

答案 4 :(得分:2)

与Lloyd的答案类似,但适用于任何大小的阵列。

$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."
        }

答案 5 :(得分:1)

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

我在骨干应用程序中经常使用它来修剪一些任意代码:

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

count drivers with [shape = "car" or shape = "bike"]

答案 8 :(得分:0)

关注这个

$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;

答案 9 :(得分:-1)

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

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

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

答案 10 :(得分:-2)

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

$letters = array("a", "b", "c", "d", "e", "f", "g");

$result = substr(implode(", ", $letters), 0, -3);

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

a, b, c, d, e, f, g

答案 11 :(得分:-2)

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

输出 - &GT; A,B,C,d,E,F,G