我有一个格式为:
的数组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更好的方法呢? - 对我来说这似乎有点太暴力了。
答案 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'];
}
}