仅在一个值以上时在值后添加逗号?

时间:2018-11-28 23:26:47

标签: php

我正在尝试回显类别的一组值。我想做的是,如果有多个值,请在其后附加一个逗号。这是我所拥有的片段:

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

问题在于,具有一个值的类别的末尾将带有逗号。

2 个答案:

答案 0 :(得分:2)

替代1

将所有值添加到数组中,然后使用implode()将它们粘合在一起:

$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 = ', ';
}

第一次迭代不会在其前面加逗号,而其余的会。

答案 1 :(得分:0)

您可以从get_the_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++;
    } 
?>