PHP:每个之后丢失的数组值

时间:2013-01-28 20:19:12

标签: php arrays foreach

首先让我解释一下我想要实现的目标:

我有一系列用户项目,包括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及其数量将从阵列中删除。

我已经困惑了几个小时但却找不到错误,我知道我忽略了一些合乎逻辑的东西。我认为每个人都会出错。

2 个答案:

答案 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
   }
}