PHP及CakePHP中foreach循环按country_id去重国家记录并统计项目数求助
你的代码之所以出现重复国家记录,是因为逻辑是边遍历项目列表边输出表格行,同一个国家对应多个项目时就会重复输出多次。需要先完成全量项目的数量统计,再统一遍历统计结果输出无重复的国家列表,修改后代码如下:
<table> <tr> <th>Country ID</th> <th>Country Name</th> <th>Number of Place</th> </tr> <?php // 第一步:统计每个country_id对应的项目总数 $country_stats = []; foreach ($projects as $project) { $country_id = $project['Project']['country_id']; if (!isset($country_stats[$country_id])) { // 首次出现该国家时初始化统计,如需存储国家名称可在这里补充字段 $country_stats[$country_id] = [ 'count' => 0, // 'country_name' => $project['Project']['country_name'] 若数据中有国家名字段可取消注释 ]; } $country_stats[$country_id]['count']++; } // 第二步:遍历统计结果输出表格,每个国家仅输出一行 foreach ($country_stats as $country_id => $stat) { ?> <tr> <td style="width: 30%"><?php echo $country_id; ?></td> <td style="width: 30%"><?php echo 'Country Name'; // 如需显示真实国家名可替换为$stat['country_name'] ?></td> <td style="width: 30%"><?php echo $stat['count']; ?></td> </tr> <?php } ?> </table>
改动逻辑说明:
- 拆分统计和输出流程,先完成全量数据统计再输出,彻底避免重复记录
- 统计数组支持扩展存储国家名称等关联字段,后续功能迭代可直接复用
- 最终输出的表格每行对应唯一country_id,自动携带该国家的项目总数
内容的提问来源于stack exchange,提问作者salgergawi
相关产品推荐
相关产品推荐

