PHP如何分组相似数组行并透视分组数据生成新关联数组
数组重组问题修正方案
原代码存在的核心问题
- 访问方式错误:原始
$data的元素是关联数组结构,并非对象,不能使用->访问属性,需要改用数组下标$item['key']的形式取值 - 组装逻辑错误:每遍历1条原始数据就向结果数组插入1条记录,既没有按同序号对齐不同类型的内容,还会生成大量字段缺失的冗余记录,最终得到9条无效数据,和预期的3条结果不符。
正确实现代码
实现思路:先按type字段将内容分组存储到对应类型的数组中,由于同类型下的内容顺序和目标结构的行顺序一一对应,最后按下标对齐三个分组的内容,逐行组装成目标结构即可。
$newdata = []; // 初始化类型分组容器 $grouped = [ 'niche_des' => [], 'product_des' => [], 'trust_site' => [] ]; // 第一步:按类型分组归集内容 foreach ($data as $item) { $type = $item['type']; if (array_key_exists($type, $grouped)) { $grouped[$type][] = $item['content']; } } // 第二步:按下标对齐重组为目标结构 $total = count($grouped['niche_des']); for ($i = 0; $i < $total; $i++) { $newdata[] = [ 'niche_des' => $grouped['niche_des'][$i], 'product_des' => $grouped['product_des'][$i], 'trust_site' => $grouped['trust_site'][$i] ]; }
执行上述代码后,$newdata的结构和给出的预期结果完全一致。
如果后续数据类型动态增减、或者同类型内容数量不一致,可以在重组前先校验各分组长度,避免下标越界问题。
内容的提问来源于stack exchange,提问作者Bien Albert
相关产品推荐
相关产品推荐

