私はpartId
とquantity
を含むオブジェクトの配列を持っています。最終的な配列の各partId
が同じpartId
のオブジェクトのquantity
を合計することによってユニークであることを望みます。オブジェクトを含む配列を縮小(結合)する最も効果的な方法は何ですか?
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
)
)
はここで良い方法がなければならないように私は感じて、私が今やっているものです。おそらく元を反復し、各要素のいずれか、さもなければインクリメントキーの値がnullの場合、一時的な連想配列にオブジェクトを挿入し、キーとしてpartIdと一時的なデータ構造として連想配列を使用して
$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);
これは、オブジェクト自体ではなく、一時テーブルに 'partId、key'ペアを保存し、元の配列を操作しています...そうですか? – nachito
@nachitoはい。あなたはforeachの後で設定解除できる一時配列しか持っていません。数量が追加され、複製が設定されていないか、一時配列の新しいレコードが保存されます。元の配列が操作されます。 – shadyyx