首先让我解释一下我想要实现的目标:
我有一系列用户项目,包括ID(item_id)和数量(例如10个项目) 如果用户购买了某个商品,则会将其添加到包含数量的数组中。 如果用户购买了(在数组中)现有项目,则会将“1”添加到数量中。
在这篇文章的帮助下我非常接近:Checking if array value exists in a PHP multidimensional array
这是我现在正在使用的代码:
$item_id = arg(1);
$quantity = '1';
$found = false;
$bought_items = null;
$data = null;
foreach ($user_items as $key => $data) {
if ($data['a'] == $item_id) {
// The item has been found => add the new points to the existing ones
$data['b'] += 1;
$found = true;
break; // no need to loop anymore, as we have found the item => exit the loop
}
}
if ($found === false) {
$bought_items = array('a' => $item_id, 'b' => $quantity);
}
$array = array($bought_items, $data);
如果item_id不存在,则将其添加到数组中 如果item_id已存在,则数量将“收到”+1
到目前为止一切顺利
现在是实际问题,让我们草拟一下情景:
我购买商品500 - >数组包含:id = 500,quantity = 1
我购买商品500 - >数组包含:id = 500,quantity = 2
我购买商品600 - >数组包含:id = 500,quantity = 2,id = 600,quantity = 1
此后出错
然后我购买了商品500 或 600,其他商品将从数组中删除。 因此,当我购买项目500时,项目600及其数量将从阵列中删除。
我已经困惑了几个小时但却找不到错误,我知道我忽略了一些合乎逻辑的东西。我认为每个人都会出错。
答案 0 :(得分:3)
如果buy_items是一个数组,那么你将覆盖你的值,而不是将它们添加到数组中。
$bought_items = array('a' => $item_id, 'b' => $quantity);
应该是:
$bought_items[] = array('a' => $item_id, 'b' => $quantity);
答案 1 :(得分:1)
我试过这个例子,它有效,所以你可以改为自己使用。另一篇文章的代码对你的目的来说是无用的
$item_id = 500;
$quantity = 1;
$user_items = array(400, 300, 200, 500, 500, 200, 500, 500);
$found = FALSE;
$bought_items = null;
$data = null;
foreach ($user_items as $data) {
if ($data == $item_id) {
// The item has been found => add the new points to the existing ones
$quantity += 1;
$bought_items[$data]['a'] = $data;
$bought_items[$data]['b'] = $quantity;
$found = TRUE;
}
if ($found === FALSE) {
$bought_items[$data] = array('a' => $data, 'b' => $quantity);
}
$found = FALSE;
}
print_r($bought_items);
输出:
array(4) {
400 => array(2) {
a => 400
b => 1
}
300 => array(2) {
a => 300
b => 1
}
200 => array(2) {
a => 200
b => 3
}
500 => array(2) {
a => 500
b => 5
}
}