在php购物车中找不到数组项目

时间:2018-10-11 17:45:31

标签: php arrays session multidimensional-array shopping-cart

在PHP数组中,我在这里遇到了奇怪的情况。我正在尝试使用会话变量创建一个简单的购物车。

问题:

当购物车为空时,将产品添加到购物车时(根据需要),程序将使用itemidqty变量创建一个新产品。添加其他新产品时,其功能也相同。

如果再次添加(如果需要),它也可以更新产品数量。

但是这里的问题是它永远找不到我添加的第一个产品,因此,每当我再次添加该产品时,它每次都会堆叠该产品,并且不会更新该产品的数量。而对于除1st以外的其他产品,它按预期运行。

例如将产品A添加到空购物车时,将itemid添加为A并且数量=1。将产品A 再次再次添加到空购物车时,它添加了itemid如A和qty=1再次(不执行qty = 2)。如果我反复添加B,C或其他,它将根据需要更新其qty

<?php
public function addinTable($id){
      $this->loadModel('Carts');

    /////////inserting into the cart table//////////7
      $item = $this->Products->get($id);
      $session = $this->request->session();

      $allProducts = $session->read('Cart');

    if(null!=$allProducts){
        echo "<br>if(allProducts is NOT EMPTY)<br>";
         if(array_search($id,array_column($allProducts, 'itemid'))){
            //if the id is already in list
                 echo "<br><b>ITEM Is IN the list already</b>";
            $key = array_search($id,array_column($allProducts, 'itemid'));
                echo "<br> key is ", $key;
            $newqty = debug($allProducts[$key]['qty']);
                echo "<br> new qty +1 = ".$newqty+=1;
                debug($allProducts[$key]['qty']++);
            $session->write('Cart',$allProducts);
               debug( $session->read('Cart'));
        }
        else{
          echo"<br><b>The id is not found but cart is not empty</b>";
            $allProducts[] = array('itemid'=>$id,
                                    'qty' => 1
                                  );
            debug( $session->read('Cart'));
        }

    }
     else{///////////if cart is empty at first
         echo"<br><b>The  cart is  empty</b>";
       $allProducts[] = array('itemid'=>$id,'qty' => 1);

          debug($allProducts[0]);
          debug($allProducts);
          debug($allProducts[0]['itemid']);

        //  if(array_search($id,array_column($allProducts, 'itemid'))==true){echo "hello";}
          $session->write('Cart',$allProducts);
                 debug($session->read('Cart'));
                     }
            $session->write('Cart',$allProducts);//save the item

  }
?>

1 个答案:

答案 0 :(得分:2)

array_search()返回索引,第一个乘积为0。 0等于假。
您需要在此处与false进行比较。

更改

if(array_search($id,array_column($allProducts, 'itemid'))) { //...

if(array_search($id,array_column($allProducts, 'itemid')) !== false) { //...

下面的小提琴就演示了这一变化:https://3v4l.org/m62Ya