如何比较多个数组,当ID相同时,删除该数组并将原始数组+1更新为PHP中的数量?
How to compare multiple arrays, when ID is the same, remove that array and update the original array with +1 to quantity in PHP?
我正在尝试创建一个“购物车”页面来显示已添加到购物车中的产品。目前,我正在显示通过循环遍历一系列产品的 foreach 循环添加到购物车的任何内容。如果我再次添加相同的产品,它会显示两次。我想删除重复的产品并将数量字段更新为 1。
例如,产品数组如下所示...
[0] => Array
(
[product_id] => 222
[quantity] => 1
)
[1] => Array
(
[product_id] => 333
[quantity] => 1
)
[2] => Array
(
[product_id] => 222
[quantity] => 1
)
[3] => Array
(
[product_id] => 444
[quantity] => 1
)
[4] => Array
(
[product_id] => 222
[quantity] => 1
)
删除具有匹配产品 ID 的重复产品并将数量键更新为 1 的最佳方法是什么?因此产品 ID 222 的数量为 3。
使用关联数组非常简单:
$input = [
[
"product_id" => 222,
"quantity" => 1
],
[
"product_id" => 333,
"quantity" => 1
],
[
"product_id" => 222,
"quantity" => 1
],
[
"product_id" => 444,
"quantity" => 1
],
[
"product_id" => 222,
"quantity" => 1
]
];
$output = [];
foreach($input as $row) {
if (array_key_exists($row["product_id"], $output)) {
$output[$row["product_id"]]["quantity"] += $row["quantity"];
}
else {
$output[$row["product_id"]] = [
"quantity" => $row["quantity"]
];
}
}
var_dump($output);
我正在尝试创建一个“购物车”页面来显示已添加到购物车中的产品。目前,我正在显示通过循环遍历一系列产品的 foreach 循环添加到购物车的任何内容。如果我再次添加相同的产品,它会显示两次。我想删除重复的产品并将数量字段更新为 1。
例如,产品数组如下所示...
[0] => Array
(
[product_id] => 222
[quantity] => 1
)
[1] => Array
(
[product_id] => 333
[quantity] => 1
)
[2] => Array
(
[product_id] => 222
[quantity] => 1
)
[3] => Array
(
[product_id] => 444
[quantity] => 1
)
[4] => Array
(
[product_id] => 222
[quantity] => 1
)
删除具有匹配产品 ID 的重复产品并将数量键更新为 1 的最佳方法是什么?因此产品 ID 222 的数量为 3。
使用关联数组非常简单:
$input = [
[
"product_id" => 222,
"quantity" => 1
],
[
"product_id" => 333,
"quantity" => 1
],
[
"product_id" => 222,
"quantity" => 1
],
[
"product_id" => 444,
"quantity" => 1
],
[
"product_id" => 222,
"quantity" => 1
]
];
$output = [];
foreach($input as $row) {
if (array_key_exists($row["product_id"], $output)) {
$output[$row["product_id"]]["quantity"] += $row["quantity"];
}
else {
$output[$row["product_id"]] = [
"quantity" => $row["quantity"]
];
}
}
var_dump($output);