php - 如果输出中的值相同,则将它们合并在一起
问题描述
我觉得我已经接近了,但是如果 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
但我想分组Jeans
并Shirts
一起输出:
Shirts, Alabama, Colorado
Jeans, Colorado, Iowa
Socks, Maine
这也应该设置它,以便如果有另一个项目,Sweaters
例如它会将这些项目组合在一起。
我也不确定我是否“正确”地写了这个,所以我也愿意接受建议。
解决方案
您可以先收集数据,然后在单独的循环中打印。这使得分组更容易。在您的示例中:替换此行:
<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 之前)的某个地方进行初始化。
推荐阅读
- c++ - C++ 意外数组溢出
- java - 在 Windows 上移动父级时移动子级
- c++ - caml_hash_varian 返回值在什么范围内?
- reactjs - 为什么我必须使用 .map 指定索引位置?
- javascript - 有没有办法在反应中将 javascript 链接到 html?
- javascript - 在页面渲染上运行函数
- flutter - Flutter 向 ListTile 添加分隔线
- ruby - 为什么这个 Sorbet 错误算作动态常量引用?
- amazon-web-services - AWS Elastic Beanstalk 中的多个 cron
- python - Dask.distributed 杀死工人每次我跑步