如果输出的值相同,则将它们合并在一起

时间:2018-10-30 19:48:21

标签: php arrays sorting merge

我觉得我已经接近了,但是如果array_search的输出在输出中包含相同的值,我不确定如何合并。仅供参考-我正在使用WordPress查询此数据。

这是我到目前为止所拥有的:

PHP:

      <?php
      global $wpdb,$post;
      $result = $wpdb->get_results("SELECT $wpdb->posts.* FROM $wpdb->posts WHERE post_type = 'clients'");
      foreach ($result as $post):
        setup_postdata($post);
        $terms = wp_get_post_terms($post->ID, array( 'state', 'product_type' ));
        $result = array_search('state', array_column($terms, 'taxonomy', 'name'));
        $term = $terms[0];
        ?>
        <?php if ($term -> taxonomy === 'state' && !empty($term)) : ?>
        <p><?php echo $terms[1]->name; ?>, <?php echo $terms[0]->name; ?></p>
      <?php endif; ?>
      <?php endforeach;?>
      <?php wp_reset_postdata(); ?>

哪个会输出:

Shirts, Alabama
Shirts, Colorado
Jeans, Colorado
Jeans, Iowa
Socks, Maine

但是我想将JeansShirts组合在一起以输出:

Shirts, Alabama, Colorado
Jeans, Colorado, Iowa
Socks, Maine

这还应该进行设置,以便在还有另一个项目(例如Sweaters)时也将这些项目组合在一起。

我也不确定我是否“正确”地编写了此内容,因此我也乐于接受建议。

1 个答案:

答案 0 :(得分:0)

您可以先收集数据,然后在单独的循环中打印。这使分组更加容易。在您的示例中:替换此行:

 <p><?php echo $terms[1]->name; ?>, <?php echo $terms[0]->name; ?></p>

使用

<?php $my_output[$terms[1]->name][] = $terms[0]->name; ?>

收集多维数组中的数据。最后,放:

<?php foreach($my_output as $key => $values): ?>
  <p><?php echo $key; ?>, <?php echo implode(',', $values); ?></p>
<?php endforeach;?>

打印所有内容。检查manual中我使用的内爆功能。为了获得最佳实践,您应该在开始的某个位置(在第一个foreach之前)初始化$my_output = array()