我有一个包含partId
和quantity
的对象数组。我希望最终数组中的每个partId
都是唯一的,方法是将quantity
个对象与partId
相加。
我想要这个:
Array
(
[0] => stdClass Object
(
[partId] => 232032
[quantity] => 2
)
[1] => stdClass Object
(
[partId] => 232032
[quantity] => 1
)
[2] => stdClass Object
(
[partId] => 232031
[quantity] => 1
)
)
这样结束:
Array
(
[0] => stdClass Object
(
[partId] => 232032
[quantity] => 3
)
[1] => stdClass Object
(
[partId] => 232031
[quantity] => 1
)
)
这就是我现在正在做的事情,我觉得必须有更好的方法。
$tmp = array();
foreach ($array1 as $item) {
if (array_key_exists($item->partId, $tmp)) {
$tmp[$item->partId]->quantity += $item->quantity;
} else {
$tmp[$item->partId] = $item;
}
}
$array2 = array_merge($tmp);
答案 0 :(得分:1)
你快到了:
$tmp = array();
foreach ($array1 as $key => $item) {
if (array_key_exists($item->partId, $tmp)) {
$array1[$tmp[$item->partId]]->quantity += $item->quantity;
unset($array1[$key]);
} else {
$tmp[$item->partId] = $key;
}
}
print_r($array1);
答案 1 :(得分:1)
显然isset()
比array_key_exists
略快,
所以你可以做到
if ( isset($tmp[$item->partId]) || array_key_exists($item->partId, $tmp) )
{
...
}
这会给你一点点提升。
我确实喜欢你的算法。
答案 2 :(得分:0)
可能使用关联数组作为临时数据结构,并将partId作为键,然后遍历原始数据,并且对于每个元素,如果键的值为null,则将对象插入临时关联数组,否则增加现有对象来自原始数组中对象的数量。