如何将implode函数合并到此列表中

时间:2017-12-20 01:30:30

标签: php comma implode

这是一个WordPress函数,它创建了一个帖子“名称”列表,但我不确定在每个术语名称之间引入逗号的最优雅方式是什么 - 我想它会涉及内爆和数组但我是对PHP来说真的很新,可以在这里使用一些指导。

$terms = get_the_terms( get_the_ID(), 'content' ); // “content” is your custom taxonomy name
if ( $terms && ! is_wp_error( $terms ) ) :    
    foreach ( $terms as $term ) {
        echo '<div class="svg-icon-container" title="'.$term->description.'">'.$term->name.'</div>';
    }
endif;

修改:对于那些想要查看术语列表的人 - 很抱歉我目前无法在我的WP网站上实施您的var_dump代码,但它看起来像这样:

  第一印象,对于高级玩家,初级玩家,   游戏亮点,玩家事务,游戏指南,操作方法,介绍,   审查,聚光灯,提示,故障排除,视频制作和流媒体,   演练......

2 个答案:

答案 0 :(得分:3)

有几种方法可以做到。

使用implode()

$terms_out = [];
$terms = get_the_terms( get_the_ID(), 'content' ); // “content” is your custom taxonomy name
if ( $terms && ! is_wp_error( $terms ) ) :    
    foreach ( $terms as $term ) {
        $terms_out[] = '<div class="svg-icon-container" title="'.$term->description.'">'.$term->name.'</div>';
    }
endif;
echo implode(', ', $terms_out);

或使用ob_start()ob_end_clean()rtrim()

<?php
ob_start();
$terms = get_the_terms( get_the_ID(), 'content' ); // “content” is your custom taxonomy name
if ( $terms && ! is_wp_error( $terms ) ) :    
    foreach ( $terms as $term ) {
        echo '<div class="svg-icon-container" title="'.$term->description.'">'.$term->name.'</div>, ';
    }
endif;
echo rtrim(ob_end_clean(), ', ');

答案 1 :(得分:3)

你必须先建立清单

$terms = get_the_terms( get_the_ID(), 'content' ); // “content” is your custom taxonomy name
if ( $terms && ! is_wp_error( $terms ) ){ 
    $list = [];   
    foreach ( $terms as $term ) {
        $list[$term->name] = $term->name; //add as both key and value to make it unique
    }
    //echo some opening html
    echo implode(', ', $list);
   //echo some closing html
}

如果你想在每个项目周围使用HTML,那会很困惑,如果是这样,那么在数组中包含HTML然后内爆

$terms = get_the_terms( get_the_ID(), 'content' ); // “content” is your custom taxonomy name
if ( $terms && ! is_wp_error( $terms ) ){ 
    $list = [];   
    foreach ( $terms as $term ) {
        $list[$term->name] = '<div class="svg-icon-container" title="'.$term->description.'">'.$term->name.'</div>'; 
    }

    echo '<div id="my_list" >'.implode(', ', $list).'</div>';
}

HTML是一个小细节。但在这种情况下确实没有一种优雅的方式,因为你必须访问这个名字。

如果你真的不想使用循环并且可以放弃标题,那么你可以将cast术语对象转换为数组,然后使用array_column()我猜想。

像这样:

$terms = get_the_terms( get_the_ID(), 'content' ); // “content” is your custom taxonomy name
if ( $terms && ! is_wp_error( $terms ) ){ 
     $t = (array)$terms;  //cast the object $terms to an array.
     $list = array_column('name', $list); 

     echo implode(', ', $list);
}

但正如我所提到的,你无法将描述作为标题。也就是说,我们仍然可以像这样包装每件物品:

 echo '<div class="svg-icon-container" >'.implode('</div>, <div class="svg-icon-container" >', $list).'</div>';

但它会变得混乱而且有点重复。我们可以清理一下,我只是想表现出“原始”的方式。这种方式更好,因为如果你改变了类,你只需要在一个地方改变它。他们接近收集,但这是一个容易犯的错误。

 $before = '<div class="svg-icon-container" >';
 $after = '</div>';
 echo $before .implode($after.', '.$before, $list).$after;

供参考

  

PHP中的类型转换与C中的类型转换一样:所需类型的名称在要转换的变量之前写在括号中。

http://php.net/manual/en/language.types.type-juggling.php

  

array_column()返回输入的单个列中的值,由column_key标识。可选地,可以提供index_key以通过来自输入数组的index_key列的值来索引返回的数组中的值。

http://php.net/manual/en/function.array-column.php

干杯。