在PHP中查找子数组匹配

时间:2010-03-09 17:38:35

标签: php arrays

我有一个格式为:

的数组
array (
   '1' => array (
      'id' => '2',
      'qty' => '4'
   ),
   '2' => array (
      'id' => '1',
      'qty' => '1'
   ),
   '3' => array (
      'id' => '2',
      'qty' => '3'
   ),
   '4' => array (
      'id' => '4',
      'qty' => '6'
   )
);

想要找到列'id'的所有重复项,并将它们合并为一个(将'qty'的值加在一起)。

有没有比两个foreach更好的方法呢? - 对我来说这似乎有点太暴力了。

2 个答案:

答案 0 :(得分:4)

不漂亮,但我认为它做了它应该做的事情(编辑以保持格式):

$id = array();
foreach($array as $v) {
    if( $id[$v['id']] ) {
        $id[$v['id']]['qty'] += $v['qty'];
    } else {
        $id[$v['id']] = $v;
    }
}

// Optional reset keys
// $id = array_values($id);
// Optional sort keys in ascending order
// ksort($id);

print_r($id);

给出:

Array
(
    [2] => Array
        (
            [id] => 2
            [qty] => 7
        )
    [1] => Array
        (
            [id] => 1
            [qty] => 1
        )
    [4] => Array
        (
            [id] => 4
            [qty] => 6
        )
)

答案 1 :(得分:2)

您可以稍微更改一下以维护格式,但这基本上就是这样做的。

$items_by_id = array();
foreach($array as $item)
{
    if(!isset($items_by_id[$item['id']]))
    {
       $items_by_id[$item['id']] = $item['qty'];
    }
    else
    {
       $items_by_id[$item['id']] += $item['qty'];
    }

}