Привет я пытаюсь перебрать список тегов с помощью 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; ?>
Попробуйте повторить массив сущностей дважды, это не причудливо, но, вероятно, будет работать.
Код для него будет примерно таким:
<?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>';
}