Не удалось найти элемент массива в корзине php - PullRequest
0 голосов
/ 11 октября 2018

Я борюсь со странной ситуацией с массивами в PHP.Я пытаюсь создать простую корзину, используя переменную сеанса.

Проблема:

Когда корзина пуста, программа создает новый продукт с переменными itemid и qty, когдатовар добавляется в корзину (по мере необходимости).То же самое происходит, когда добавляются другие новые продукты.

Он также может обновлять количество продуктов при повторном добавлении (по мере необходимости).

Но проблема здесь в том, что он никогда не находит 1-й продукт, который я добавляю, поэтому всякий раз, когда я добавляю этот продукт снова, он складывает продукт каждый раз и не обновляет количество продукта.Принимая во внимание, что для других продуктов, кроме 1-го, он действует как ожидалось.

например.когда продукт A добавляется в пустую корзину, он добавляет itemid как A и qty = 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 голосов
/ 11 октября 2018

array_search () возвращает индекс, который равен 0 для первого продукта.0 оценивается как ложное.
Здесь необходимо сравнение с ложным.

Изменить

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

на

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

Вот скрипка, демонстрирующая это изменение: https://3v4l.org/m62Ya

...