Php 仅当有多个值时才在值后添加逗号?

Php 仅当有多个值时才在值后添加逗号?,php,Php,我试图回显类别的一组值。我想做的是,如果有多个值,在后面加一个逗号。以下是我的一段经历: <?php foreach((get_the_category()) as $category) { echo $category->cat_name . ', '; } ?> 这样做的问题是,具有一个值的类别的末尾将有一个逗号。您可以从get\u The\u category()中获取结果计数,设置计数器并在每次循环中递增。检查$i是否等于计数,如果等于,则不要添加逗号 假设该函数

我试图回显类别的一组值。我想做的是,如果有多个值,在后面加一个逗号。以下是我的一段经历:

<?php foreach((get_the_category()) as $category) { echo $category->cat_name . ', '; } ?>


这样做的问题是,具有一个值的类别的末尾将有一个逗号。

您可以从
get\u The\u category()
中获取结果计数,设置计数器并在每次循环中递增。检查
$i
是否等于计数,如果等于,则不要添加逗号

假设该函数是可计数的,并且不需要检查以确保其结果不是0:

<?php
    $count = count(get_the_categories());
    $i = 1;
    foreach((get_the_category()) as $category) { 
        if($i < $count) {
            echo $category->cat_name . ', '; 
        } else {
             echo $category->cat_name;
        }
        $i++;
    } 
?>

备选方案1 将所有值添加到数组中,然后仅使用将它们粘合在一起:

$catArray = [];

foreach((get_the_category()) as $category) { 
    $catArray[] = $category->cat_name; 
}

// Now we can implode the array, using , as the glue
echo implode(', ', $catArray);
备选案文2 您还可以在循环中预加逗号,这样就不需要任何if语句:

$glue = '';

foreach((get_the_category()) as $category) { 
    echo $glue . $category->cat_name; 
    $glue = ', ';
}
或较短的版本(但可读性较差,需要PHP 7+):


第一次迭代之前不会有任何逗号,但其余的会。

您需要检查最终字符串是否以逗号结尾,然后将其删除。无论您有一个或多个项目,都会出现问题。
foreach((get_the_category()) as $category) { 
    echo ($glue ?? '') . $category->cat_name; 
    $glue = ', ';
}