You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现数组按动态数据库国家字段分组的问题求助

解决按GRUPO_ANUNCIO字段分组数组的问题

我来帮你梳理下代码里的问题,然后给出能实现你需求的正确写法~

先说说你现有代码的问题

  1. 变量拼写错误:你在array_push里写了contry_array,正确的变量名应该是country_array,这个拼写错误会直接导致PHP报错。
  2. 逻辑结构混淆:你把$country_array既用来存储国家名称列表,又想让它成为分组后的多维数组,这完全打乱了数据结构。in_array的判断逻辑根本不适用这里,因为你需要的是以国家名为键的数组,而不是单纯的国家名集合。
  3. 初始化错误:当遇到新国家时,你先把国家名push到数组的数字索引里,接着又试图给这个国家名的字符串键添加元素,这会让数组同时存在数字索引和字符串索引,结构彻底混乱。

正确的实现方式

方式一:基础foreach循环(最直观易读)

这个写法逻辑清晰,一步步构建分组数组:

// 初始化空的分组数组
$country_array = array(); 

foreach ($results as $result) { 
    // 获取当前元素的国家名称
    $country = $result['GRUPO_ANUNCIO']; 
    
    // 如果该国家的分组还未创建,先初始化一个空数组
    if (!isset($country_array[$country])) {
        $country_array[$country] = array();
    }
    
    // 将当前元素追加到对应国家的分组中
    $country_array[$country][] = $result; 
}

方式二:用array_reduce简化代码(更简洁的函数式写法)

如果你喜欢更紧凑的代码,可以用PHP的array_reduce函数来实现:

$country_array = array_reduce($results, function($grouped, $item) {
    $country = $item['GRUPO_ANUNCIO'];
    // 直接追加元素,PHP会自动初始化空数组(如果键不存在)
    $grouped[$country][] = $item;
    return $grouped;
}, array());

验证效果

运行上面任意一段代码后,你都会得到和你期望完全一致的分组数组:以国家名为键,对应的值是该国家下的所有原始数组元素。

内容的提问来源于stack exchange,提问作者BRABO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 05:32:45