显示一列的唯一数组数据,但显示其他列的多个项目

时间:2018-02-16 10:08:38

标签: php wordpress

我有一个显示合同和位置的循环。

循环并获取合同名称和每行的位置。行中有重复的合约,所以我只想显示一个,然后列出它下面的所有位置。

我知道我可以使用类似array_unique();的内容删除重复内容但不确定如何将其集成到我的循环中。

如何显示所有独特合约并显示与该合约相关的多个地点?

  <?php
  // Find all locations tied to the current logged in user.
  $args = array(
    'posts_per_page'    => -1,
    'post_type'     => 'locations',
    'meta_query'    => array(
        'relation'      => 'OR',
        array(
            'key'       => 'regional_operations_manager',
            'value'     => $user->id,
            'compare'   => 'LIKE'
        ),
    ),
  );
  // query
  $the_query = new WP_Query( $args ); ?>

  <?php if( $the_query->have_posts() ):
    while( $the_query->have_posts() ) : $the_query->the_post(); ?>
      <?php $clients[] = array('contract' => get_field('contract'), 'location' => get_the_title()); ?>
    <?php endwhile;
  endif;

  // Sort them alphabetically and only show unique locations.
  //$contracts = array_unique( $contracts );
  //sort($contracts);
  foreach ( $clients as $key => $row ) { ?>
    <?php echo $contract[$key] = $row['contract']; ?><br />
    <?php echo $location[$key] = $row['location']; ?><br />
  <?php } ?>

这是一些数据:

  1. 阿迪达斯 Viables 3 Viables Business

  2. 阿尔迪 布里

  3. 阿尔迪 彭布罗克码头

  4. 阿尔迪 哈佛威斯特

  5. 第一个字是合同,其余的是合同。

    我想只显示一个“Aldi”,例如位于其下方的位置2,3和4。因此,一份独特的合同可以有多个地点。

1 个答案:

答案 0 :(得分:2)

我对wordpress不太流利但确定你可以通过wp_query解决订单部分。无论哪种方式,您都可以像这样构建$clients数组:

<?php if( $the_query->have_posts() ):
    while( $the_query->have_posts() ) : $the_query->the_post(); ?>
      <?php $clients[get_field('contract')]['locations'] = []; ?>
      <?php array_push($clients[get_field('contract')]['locations'], get_the_title()); ?>
    <?php endwhile; ?>
  <?php endif; ?>

这将创建$clients数组,看起来像这样,你可以在它上面...

<?php

$clients['Adidas']['locations'] = [];
array_push($clients['Adidas']['locations'], 'Viables 3 Viables Business');

$clients['Aldi']['locations'] = [];
array_push($clients['Aldi']['locations'], 'Bridgend');
array_push($clients['Aldi']['locations'], 'Pembroke Dock');
array_push($clients['Aldi']['locations'], 'Haverfordwest');

foreach ($clients as $contract => $locations ) {
    echo 'Contract: ' . $contract . "\n";
    sort($locations['locations']); // this will sort the locations alphabetically
    foreach ($locations['locations'] as $location ) {
        echo ' - Location: ' . $location . "\n";
    }
}

结果如下:

Contract: Adidas
 - Location: Viables 3 Viables Business
Contract: Aldi
 - Location: Bridgend
 - Location: Haverfordwest
 - Location: Pembroke Dock

You can play with it here