PHP技术问题:如何将单元素关联数组合并为分组子数组?
解决PHP数组分组合并的问题
嘿,我完全懂你遇到的问题了!你的循环逻辑出了点小纰漏——每次外层循环都会把整个$feild_data数组完整遍历一遍,导致$post[$i]里的键值对会被后续遍历到的元素不断覆盖,最后两次循环都只留下了最后一组(blue那组)的数据,自然就重复了。
错误原因拆解
你的代码里,外层循环跑2次,每次循环都遍历全部6个元素:
- 第一次循环时,先给
$post[0]['term_title']赋值black,接着赋值color_quantity=2、color_price=22,但之后又遇到了term_title=blue,直接把之前的black覆盖成了blue,后续的color_quantity=3、color_price=33也跟着覆盖掉之前的值,最后$post[0]就变成了blue那组。 - 第二次循环同理,再次遍历全部元素,结果
$post[1]也被改成了blue那组。
正确的解决方案
因为你的原数组是每3个元素为一组(term_title→color_quantity→color_price),我们可以针对性地分组合并:
方法1:步长为3的for循环(直接高效)
// 你的原始数据数组 $feild_data = [ ['term_title' => 'black'], ['color_quantity' => 2], ['color_price' => 22], ['term_title' => 'blue'], ['color_quantity' => 3], ['color_price' => 33] ]; $post = []; // 每3个元素为一组,循环步长设为3 for ($i = 0; $i < count($feild_data); $i += 3) { // 合并当前组的三个子数组 $post[] = array_merge( $feild_data[$i], $feild_data[$i+1], $feild_data[$i+2] ); } print_r($post);
方法2:用array_chunk分组后合并(更灵活)
如果以后每组的元素数量可能变化,用array_chunk会更方便:
$feild_data = [ ['term_title' => 'black'], ['color_quantity' => 2], ['color_price' => 22], ['term_title' => 'blue'], ['color_quantity' => 3], ['color_price' => 33] ]; // 把原始数组切成每3个元素一组的二维数组 $groups = array_chunk($feild_data, 3); $post = []; foreach ($groups as $group) { $mergedGroup = []; // 合并当前组内的所有子数组 foreach ($group as $item) { $mergedGroup = array_merge($mergedGroup, $item); } $post[] = $mergedGroup; } print_r($post);
两种方法运行后都会得到你想要的结果:
Array ( [0] => Array ( [term_title] => black [color_quantity] => 2 [color_price] => 22 ) [1] => Array ( [term_title] => blue [color_quantity] => 3 [color_price] => 33 ) )
内容的提问来源于stack exchange,提问作者M. Ferdosiyan
相关产品推荐
相关产品推荐

