1

まず、私が達成しようとしていることを説明しましょう。

ID(item_id)と数量(例:10アイテム)で構成されるユーザーアイテムの配列があります。ユーザーがアイテムを購入すると、数量を含む配列に追加されます。ユーザーが(配列内の)既存のアイテムを購入すると、数量に「1」が追加されます。

私はこの投稿の助けを借りて本当に近づきました:配列値がPHP多次元配列に存在するかどうかをチェックする

これは私が今使っているコードです:

 $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とその数量が配列から削除されます。

私は何時間も困惑してきましたが、間違いを見つけることができません。私は論理的な何かを見落としていることを知っています。それぞれのでうまくいかないと思います。

4

2 に答える 2

3

Buyed_itemsが配列の場合、値を配列に追加するのではなく、値をオーバーライドします。

$bought_items = array('a' => $item_id, 'b' => $quantity);

する必要があります:

$bought_items[] = array('a' => $item_id, 'b' => $quantity);
于 2013-01-28T20:20:44.693 に答える
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
   }
}
于 2013-01-29T01:17:13.690 に答える