首页 > 解决方案 > 如果输出中的值相同,则将它们合并在一起

问题描述

我觉得我已经接近了,但是如果 an 的输出在输出中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例如它会将这些项目组合在一起。

我也不确定我是否“正确”地写了这个,所以我也愿意接受建议。

标签: phparrayssortingmerge

解决方案


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

 <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;?>

打印所有内容。查看我使用的内爆功能的手册$my_output = array()对于最佳实践,您应该在开始时(在第一次 foreach 之前)的某个地方进行初始化。


推荐阅读