PHP-将多维数组与相似键组合

PHP-将多维数组与相似键组合,php,algorithm,multidimensional-array,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' (l

我有一个数组要清理

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)
我想按数量组合数组,其中它们的产品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个元素,您可以使用以下方法:

$newarray = array();
foreach($cleanarray as $array){
        $newarray[$array[0]] += $array[1];
}
您必须对其进行更改以满足您的需要,但我在初始阵列上运行此命令得到的输出是:

Array ( [24] => 3 [40] => 5 )

如果按照注释中的建议,将
product\u 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\u id
s作为键,而不仅仅是0,1等,如果这是一个问题(我不明白为什么会这样),您可以使用
array\u值
将它们恢复到正常的零索引数组。

此数组的设计很差。假设
product\u id
已经是唯一的,为什么它们存储在一个嵌套数组中,而不是使用第一个数组的键作为
product\u id
我感谢您的输入,但这没有帮助。数组正在其他地方创建,这只是几个键中的2个的一个片段。您是否愿意接受有关输出的建议?如果
product\u id
成为主键而不是任意数字,则输出格式会变得模糊,并且更容易实现。另外,您编写的代码是否生成初始数组,或者它是其他人的API?该数组是从数据库中提取的。从中提取的表有多个列,包括其他id,如user_id等。在使用PHP进行后期处理之前,您能否查询数据库以聚合这些列?数量不一定是1,请参见第二个条目。是的。我注意到了这一点,并补充了我的答案。这很有效,谢谢。不过,我不明白在这个问题上的反对票。不客气。根据向下投票箭头上的文字,我假设,由于问题不清楚且有用,向下投票的人认为该问题未显示任何研究成果。是的,其后的分号使我认为该问题要么不清楚,要么没有用处。我确实做了一些研究,得出了与你给我的相同的答案。我只是不知道数组_的值,一直认为出于某种原因我需要以这种方式对它进行索引。