我有一个我想要清理的数组。
0 =>
array
'product_id' => string '24' (length=2)
'qty' => string '1' (length=1)
1 =>
array
'product_id' => string '40' (length=2)
'qty' => string '4' (length=1)
2 =>
array
'product_id' => string '40' (length=2)
'qty' => string '1' (length=1)
3 =>
array
'product_id' => string '24' (length=2)
'qty' => string '1' (length=1)
4 =>
array
'product_id' => string '24' (length=2)
'qty' => string '1' (length=1)
我希望通过qty组合数组,其product_id键匹配并返回相同的结构。所以上面的输出会返回:
0 =>
array
'product_id' => string '24' (length=2)
'qty' => string '3' (length=1)
1 =>
array
'product_id' => string '40' (length=2)
'qty' => string '5' (length=1)
有没有办法做到这一点,只有一次循环数组?处理这个问题的最佳方法是什么?
注意
我理解设计并不理想,但我不是在询问设计。我只想问一种获得所需输出的有效方法。
答案 0 :(得分:1)
如果您按照评论中的建议使用product_id
作为结果数组中的键,那么以这种方式压缩项目非常简单。
foreach ($initial_array as $item) {
$combined_array[$item['product_id']]['product_id'] = $item['product_id'];
$combined_array[$item['product_id']]['qty'] += $item['qty'];
}
此方法将在收集数量字段时保留原始格式。您将product_id
作为外部数组中的键,而不仅仅是0,1等,如果这是一个问题(我不明白为什么会这样),您可以使用{{1}使它们回到正常的零索引数组。
答案 1 :(得分:0)
假设内部数组只有2个元素,你可以使用这样的东西:
$newarray = array();
foreach($cleanarray as $array){
$newarray[$array[0]] += $array[1];
}
您必须更改它才能满足您的需求,但我在初始阵列上运行此输出所获得的输出是:
Array ( [24] => 3 [40] => 5 )