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

Posted

技术标签:

【中文标题】如何将内爆函数合并到此列表中【英文标题】:How to incorporate an implode function into this list 【发布时间】:2017-12-20 01:30:29 【问题描述】:

这是一个 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 代码,但是它看起来像这样:

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

【问题讨论】:

您能否在结果中提供部分的 print_r 转储?每个术语是否应该有多个名称? 请提供所需输出的样本。 我不知道如何使用print_r_dump?请明确告诉我如何以及在何处将其添加到代码中。每个术语只有一个名称,但它是由多个单词组成的字符串。 var_dump($terms); 在 if 语句之前使用 this 并在此处发布结果 是的,我们绝对需要知道您希望列表的外观。您必须更改 html 【参考方案1】:

你必须先建立列表

$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 会令人困惑,如果是这样,请将其包含在数组中然后内爆

$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

干杯。

【讨论】:

回复:"add as both key and value to make it unique" - 由于我是编程新手,您能否解释一下这对外行人意味着什么?谢谢。 在 PHP 中,数组键是唯一的,所以如果你有重复的名字(我不知道这是否可能)你只会得到一个。 例如,假设您有一个术语$term-&gt;name = 'foo',这将变为['foo' =&gt; '&lt;div ... &gt;'],因此您不能有两个都命名为foo 的数组键。使用有意义的东西作为数组键只是一种习惯。希望这更有意义..我为这个事实使用了钥匙。很多,我的意思是很多。【参考方案2】:

有几种方法可以做到这一点。

使用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(), ', ');

【讨论】:

我会避免输出缓冲自己,如果只是为了便于解释的话。否则我们的想法基本相同...... :)。 只是提供多个选项,顺便说一句,使用 ob 没有问题,每天都有成千上万的网站使用它.. 都不错,我也天天用。我的意思是 OP 专门说I am really quite new to PHP 和后来的I'm not sure how to use print_r_dump? Please tell me explicitly how and where,这对我说越简单越好。就是这样。

以上是关于如何将内爆函数合并到此列表中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用从 stdClass 对象数组中内爆一列?

Python函数将多个列表中的唯一值合并到一个列表中

分解/内爆列表(';';.join())

将数组内爆为来自 mysql 查询的逗号分隔字符串

Pandas 数据框列表:合并函数输出

如何在python中把两个列表的各项分别合并为列表