it-swarm.com.ru

Удалить дублированные значения из цикла

У меня есть цикл, который выводит поля <option> для группы <select>. Он содержит названия многих городов для многих туристических пакетов, которые я публикую. Хитрость в том, что мне нужно избегать повторных значений.

Например: у меня 4 дорожных пакета, отправляющихся из Чикаго, 5 из Орландо, 3 из Лос-Анджелеса и 2 из Нью-Йорка.

Итак, это выводит:
Выберите свой город
Чикаго
Чикаго
Чикаго
Чикаго
Орландо
Орландо
Орландо
Орландо
Орландо
Лос-Анджелес
Лос-Анджелес
Лос-Анджелес
Нью-Йорк
Нью-Йорк

Мне нужно будет распечатать только один из них!

<select name="nDep" id="iDep" onchange="this.form.submit();">
<option selected disabled>Outras saídas disponíveis</option>
  <?php
    $args = array(
      'post_type'     => 'packs',
      'order'         => 'ASC'
    );
    $the_query = new WP_Query( $args );
    if(have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
  ?>

<option value="<?php the_field('departures'); ?>"><?php the_field('departures'); ?></option>

  <?php endwhile; endif; ?>
</select>
1
user3301994

Я не знаю ни одного специфичного для WordPress способа исключения сообщений с дублирующими заголовками из запроса, и я уверен, что есть несколько способов решить эту проблему. Решение, которое приходит на ум, состоит в том, чтобы сохранить каждый заголовок поста в массиве, а затем проверить, существует ли этот заголовок перед выводом поста.

Несколько быстрых непроверенных кодов:

<?php
    $args = array(
      'post_type'     => 'packs',
      'order'         => 'ASC',
      'orderby'       => 'title'
    );
    $the_query = new WP_Query( $args );
    // array to store cities
    $unique_cities = array();
    if( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
        $city = get_the_field('departures');
        // only create option if city hasn't been added yet
        if( ! in_array( $city, $unique_cities ) ) :
            // add city to array so it doesn't repeat
            $unique_cities[] = $city;
    ?>

            <option value="<?php echo $city; ?>"><?php echo $city; ?></option>

  <?php
    endif;
  endwhile; endif; ?>

Также обратите внимание на два других незначительных изменения, которые, я думаю, вы намеревались:

  • добавлен параметр orderby в WP_Query, чтобы города отображались в виде A-Z.
  • исправлена ​​первая have_posts(), поэтому он тестирует ваш пользовательский запрос
3
mrwweb