PHP - 将多维数组与类似键

时间:2015-09-03 21:36:03

标签: php algorithm multidimensional-array

我有一个我想要清理的数组。

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)

有没有办法做到这一点,只有一次循环数组?处理这个问题的最佳方法是什么?

注意

我理解设计并不理想,但我不是在询问设计。我只想问一种获得所需输出的有效方法。

2 个答案:

答案 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 )