使用array_unique删除重复项

时间:2015-02-10 12:21:36

标签: php foreach array-unique

您好我正在尝试使用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但是无法使其工作。

由于

3 个答案:

答案 0 :(得分:0)

您需要缓存已使用的$ entity-&gt; 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 ?>

答案 1 :(得分:0)

您的数组包含对象。 array_unique()尝试将您的数组值作为字符串进行比较。有关详细信息,请参阅此处的热门答案:array_unique for objects?

解决此问题的一种方法是创建一个已经输出的标签数组,然后每次检查它:

<?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; ?>

答案 2 :(得分:0)

尝试两次迭代实体数组,这不是很花哨但可能会有效。

  1. 解析标记标题并将其添加到临时数组
  2. 在temp数组中应用array_unique
  3. 迭代临时数组以打印结果
  4. 它的代码将是这样的:

    <?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>';
    }