0

こんにちは、ワードプレスを使用してタグのリストをループしようとしています。タグのリストは、別のプラグインを介して生成されます。

現在、これは私が持っているコードです

    <?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 を使用して調べましたが、これを機能させることはできません。

ありがとう

4

3 に答える 3

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 ?>
于 2015-02-10T12:40:41.123 に答える
0

配列にはオブジェクトが含まれています。array_unique()配列値を文字列として比較しようとします。詳細については、こちらのトップの回答を参照してください: array_unique for objects?

これを解決する 1 つの方法は、既に出力されているタグの配列を作成し、毎回それに対してチェックすることです。

<?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; ?>
于 2015-02-10T12:43:31.920 に答える
0

エンティティの配列を 2 回反復してみてください。空想的ではありませんが、おそらくうまくいくでしょう。

  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>';
}
于 2015-02-10T12:43:34.303 に答える