嗨,我正在尝试使用wordpress循环浏览标签列表。标签列表是通过另一个插件生成的。
目前这是我的代码
<?php foreach($entities as $entity): ?>
<?php $str = str_replace(' ', '-', esc_attr($entity->galdesc)) ?>
<li><a href="#" id="<?php echo $str ?>"><?php echo_safe_html(nl2br($entity->galdesc)); ?></a></li>
<?php endforeach ?>
这会输出如下所示的标签列表
tag1
tag1
tag2
tag1
tag3
所有的标签都是这样,但我正在尝试删除重复的标签,我已经考虑过使用array_unique,但无法实现。
感谢
您需要缓存已使用的$entity->galdesc的值。使用in_array的方法可能如下所示:
<?php $tagnamesUsed = array(); ?>
<?php foreach($entities as $entity): ?>
<?php $str = str_replace(' ', '-', esc_attr($entity->galdesc)) ?>
<?php if (!in_array($entity->galdesc, $tagnamesUsed)): ?>
<li><a href="#" id="<?php echo $str ?>"><?php echo_safe_html(nl2br($entity->galdesc)); ?></a></li>
<?php $tagnamesUsed[] = $entity->galdesc; ?>
<?php endif; ?>
<?php endforeach ?>
您的数组包含对象。array_unique()
尝试将数组值作为字符串进行比较。有关更多详细信息,请参阅此处的顶部答案:对象的array_unique?
解决这个问题的一种方法是创建一个已经输出的标签数组,然后每次都对其进行检查:
<?php $arrTags = array(); ?>
<?php foreach($entities as $entity): ?>
<?php $str = str_replace(' ', '-', esc_attr($entity->galdesc)) ?>
<?php if(in_array($str,$arrTags)){ continue; } else { $arrTags[] = $str; } ?>
<li><a href="#" id="<?php echo $str ?>"><?php echo_safe_html(nl2br($entity->galdesc)); ?></a></li>
<?php endforeach; ?>
尝试迭代实体数组两次,这并不奇怪,但可能会奏效。
- 分析标记标题并将其添加到临时数组中
- 在临时数组中应用array_unique
- 迭代临时数组以打印结果
它的代码如下:
<?php
$tmp = array();
foreach($entities as $entity) {
$tmp[] = str_replace(' ', '-', esc_attr($entity->galdesc));
}
$uniques = array_unique($tmp);
foreach ($uniques as $entity) {
echo $entity . '<br>';
}