逗号分隔仅适用于前 2 个 foreach 项目?

Comma seperation only working on first 2 foreach items?

我创建了一个函数来显示 WordPress 中自定义 Post 类型的 分类法 ,但是我确定问题与PHP:

function portfolio_tax($x) {
    $terms = get_terms($x);
    $count = count($terms);
    $commaCheck = 0;
    foreach($terms as $term) {
        echo $term->name;
        if(!$commaCheck >= $count){echo ', ';}
        $commaCheck++;
    }
}

然后我使用 <?php portfolio_tax('category');?>(在同一页面的两个不同位置用 tag 替换 category)来显示他们在投资组合详细信息页面上。

在 max. 下似乎一切正常。 2 项,但如果有更多项,, 将停止显示,如下所示:

Tags

Beach, HelloMacro

(当 HelloMacro 之间应该有一个 space 时)

因为你的发言。您首先检查 !$commaCheck,默认情况下为真,因为 $commaCheck 为 0,然后您提升它。所以它会是假的。

删除!在 $commaCheck 之前或将其放在 () 中,如下所示:!($commaCheck >= $count) (不知道你需要哪种逻辑,有没有!

if($commaCheck >= $count){echo ', ';} 尝试删除“!”

创建术语名称映射。然后,您可以弹出最后一个元素,用逗号连接其余元素,然后将弹出的元素连接回:

function portfolio_tax($x) {
    $term_names = array_map(function($t){
        return $t -> name;
    }, get_terms($x));

    $last = array_pop($term_names);
    echo implode(',', $term_names) . ' ' . $last;
}

另一种(更简单的)方法是在每个 $term(第一个除外)之前而不是之后回显逗号。在那种情况下,您只需要一个反变量而不是两个来检查它是否是第一个元素。

function portfolio_tax($x) {
    $terms = get_terms($x);
    $commaCheck = 0;
    foreach($terms as $term) {
        if($commaCheck != 0){echo ', ';}
        echo $term->name;
        $commaCheck++;
    }
}