Удалить дубликаты с помощью 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, но не могу заставить это работать.

Спасибо

0

Решение

Вам необходимо кэшировать значения $ 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 ?>
0

Другие решения

Ваш массив содержит объекты. 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; ?>
0

Попробуйте повторить массив сущностей дважды, это не причудливо, но, вероятно, будет работать.

  1. Разобрать заголовок тега и добавить его во временный массив
  2. Примените array_unique в временном массиве
  3. Итерация временного массива для печати результата

Код для него будет примерно таким:

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