Php добавить в корзину проблема

Я пытаюсь создать функцию php, которая добавляет товар в корзину. я хочу, чтобы он проверил массив, чтобы увидеть, есть ли там элемент, увеличивает ли количество, если не создает элемент в корзине.

Вместо этого он добавляет элемент, он сработает в первый раз (если элементы уже есть, просто увеличьте количество), но если вы добавите еще один элемент, он продолжит создавать новые экземпляры этого элемента в магазине. тележка например

позиция 1 - количество 4 позиция 2 - количество 1 позиция 2 - количество 1 позиция 2 - количество 1 ... и так далее ...

ниже код, который у меня есть до сих пор?

function add_item ($id, $qty)
    {
        $count=$this->countItems;
        echo  "uytfdgghjkl;kj<br>";
        $added = false;
        if($count>0)
        {
            $i=0;
            while($added == false)
            {
                echo "fghjkl<br>";
                $tid = $this->items[$i]->getId();
                echo "new ID: ".$tid."<br>";
                echo "old ID: ".$id."<br>";
                echo $i;
                if($tid == $id)
                {
                    $amount = $this->items[$i]->getQty();
                    $this->items[$i]->setQty($amount+1);
                    $added = true;
                    //$i++;
                    //break;
                }
                if($added == true)
                {
                    break;
                }
                else //if($added == false)
                {
                    $this->items[$this->countItems] = new OrderItem($id, $qty);
                    //$this->total = $total+ ($qty *$price);
                    $this->countItems++;
                    $added = true;
                    //break;
                }
                //else break;
                $i++;
            }

        }
        else
        {
            $this->items[$this->countItems] = new OrderItem($id, $qty);
            //$this->total = $total+ ($qty *$price);
            $this->countItems++;
        }
    }

person Peter    schedule 09.05.2011    source источник
comment
В этом коде очень много неправильного. Но для начала вам никогда не нужно проверять дубликаты - если использование SKU в качестве ключа индекса не является очевидным, вам нужно потратить намного больше времени на изучение и внедрение алгоритмов.   -  person symcbean    schedule 09.05.2011


Ответы (2)


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

function add_item ($id, $qty)
    {
        $count=$this->countItems;
        echo  "uytfdgghjkl;kj<br>";
        $added = false;
        if($count>0)
        {
            for($i=0; $i < $count; $i++)
            {
                echo "fghjkl<br>";
                $tid = $this->items[$i]->getId();
                echo "new ID: ".$tid."<br>";
                echo "old ID: ".$id."<br>";
                echo $i;
                if($tid == $id)
                {
                    $amount = $this->items[$i]->getQty();
                    $this->items[$i]->setQty($amount+1);
                    $added = true;
                    break;
                }
            }

        }
        if(!$added)
        {
            $this->items[$this->countItems] = new OrderItem($id, $qty);
            //$this->total = $total+ ($qty *$price);
            $this->countItems++;
        }
    }

Еще лучшим вариантом было бы использовать словарь

ie.

$arr = array();
$arr['item_id'] = new OrderItem(...);

Затем вы можете проверить, находится ли элемент в массиве, используя:

if(isset($arr[$id])){
    ...
}
person GWW    schedule 09.05.2011

Логика ошибочна. Код увеличивает количество товара только в том случае, если это первый товар в корзине. В противном случае он добавит элемент. Доказано здесь:

if($added == true) // if this cart item's quantity was incremented
{
    break;
}
else // add item
{
    $this->items[$this->countItems] = new OrderItem($id, $qty);
    // etc...
}

Вместо этого вы должны удалить new OrderItem($id, $qty) из цикла и проверить значение $added после цикла по всем элементам корзины. Чтобы это сработало, вам нужно выполнить цикл через for (вместо while), используя $count.

person webbiedave    schedule 09.05.2011