【问题标题】:If values from output are the same merge them together如果输出中的值相同,则将它们合并在一起
【发布时间】:2018-10-30 19:48:20
【问题描述】:

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

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

【问题讨论】:

  • 您是否在屏幕上显示类似逗号分隔的数据?还是这正是您表达该问题所需输出的方式?我的意思是,您可以使用 GROUP BY AND GROUP CONCAT() 在查询中将所有这些拼接在一起,但我不确定您是如何执行任务的。
  • 好吧,最终,我会把它输出到不同的东西,所以我只是展示这个例子并测试一下。我已经考虑修改我的查询,但问题是 WordPress 不会将分类数据存储在 post 表中。我试图对与帖子和分类法相关的其他表进行一些连接,但它从未产生我想要的结果。

标签: php arrays sorting merge


【解决方案1】:

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

 <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()

【讨论】:

  • 哇哦。所以我更新了它,看起来它已经分组了,但看起来它也在重复其他一些项目:Shirts, AlabamaShirts, Alabama,ColoradoShirts, Alabama,ColoradoJeans, ColoradoShirts, Alabama,ColoradoShirts, Alabama,ColoradoShirts, Alabama,ColoradoJeans, Colorado,IowaShirts, Alabama,ColoradoJeans, Colorado,IowaSocks, Maine不是确定我是不是搞砸了什么。
  • 看起来你把我的三行代码放在你的 foreach 循环中。您需要将它们放在循环之后;或在&lt;?php wp_reset_postdata(); 之后?>.
  • 行动党!好的,是的......看起来它输出正确。谢谢!我将对此进行更多测试,但我认为就是这样!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2022-01-21
  • 1970-01-01
  • 2021-01-17
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
相关资源
最近更新 更多