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


113

我知道如何使用foreach遍历数组的项并附加逗号,但是必须取下最后的逗号总是很痛苦的。有没有简便的PHP方式?

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

最终我想要

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

Answers:


231

您想为此使用爆破

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


有一种无需尾随就可以追加逗号的方法。如果您必须同时执行其他一些操作,则需要执行此操作。例如,也许您想引用每个水果,然后用逗号将它们分开:

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

另外,如果您只是按照“正常”的方式在每个项目后面添加逗号(就像您之前所做的那样),并且您需要删掉最后一个,那就这样做$list = rtrim($list, ', ')substr在这种情况下,我看到许多人不必要地乱搞。


4
调用<code> $ fruitlist ='“'(implode('”,“',$ fruit)。'”'; </ code>
cwallenpoole 2010年

如果要在将数据转换为字符串之前对其进行操作,则foreach循环会更好。例如,addslashes或mysql_real_escape_string。
Naphtali Gilead 2015年

39

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

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

5
如上面的回答,您可以执行implode(',',$ arr)
joseantgv

@joseantgv是的,我不知道为什么要使用rtrim()。我记得在字符串末尾有多余的逗号是有问题的,但是我不记得它正在发生的情况。
Nate

5

结果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

与劳埃德(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."
        }

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 ", ";
    }
}

2
如果总数不等于4?
Jyothish 2013年

1

有时在某些情况下甚至不需要php(例如,每个列表项都位于render上自己的通用标记中),如果在渲染后它们是单独的元素,则总是可以通过css将逗号添加到所有元素(但last-child除外)从脚本。

实际上,我在骨干应用程序中经常使用它来减少一些任意的代码脂肪:

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

基本上看一下元素,定位除最后一个元素以外的所有元素,并在每个元素之后添加一个逗号。视情况而定,根本不必使用脚本是一种替代方法。



0

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

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

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

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;

-1

如果执行引用的答案,则可以执行

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

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


-2

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

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

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.