PHP Управление корзиной с массивом $ _Session - PullRequest
0 голосов
/ 26 мая 2020

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

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

То, что у меня есть до сих пор, выглядит следующим образом:

public function addToCart($id){

        $this->articleName = ($this->getArticleNamefromID($id)[0]["name"]);

        if ($_SESSION['cart'] == null){

            $array = ["articleName" => $this->articleName, "amount" => 1];
            array_push($_SESSION['cart'], $array);

        }else{

            foreach($_SESSION['cart'] as $key => $value) {

                if($value["articleName"] != $this->articleName){

                    $array = ["articleName" => $this->articleName, "amount" => 1];
                    array_push($_SESSION['cart'], $array);

                }else {

                    $amountInc = $value["amount"] + 1;
                    $_SESSION['cart'][$key]["amount"] = $amountInc;

                }

            }

        }

    }

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

Cart:
Array
(
    [0] => Array
        (
            [articleName] => Daycream
            [amount] => 10
        )

    [1] => Array
        (
            [articleName] => Nightcream
            [amount] => 6
        )

    [2] => Array
        (
            [articleName] => Nightcream
            [amount] => 5
        )

    [3] => Array
        (
            [articleName] => Nightcream
            [amount] => 4
        )

    [4] => Array
        (
            [articleName] => Nightcream
            [amount] => 3
        )

    [5] => Array
        (
            [articleName] => Nightcream
            [amount] => 2
        )

    [6] => Array
        (
            [articleName] => Nightcream
            [amount] => 1
        )

)

$ this-> articleName - это sql вызов базы данных и всегда дает мне выбранный элемент, это должно быть нормально. Я предполагаю, что у меня есть проблемы с foreach($value["articleName"] != $this->articleName). Я намеревался проверить, соответствует ли текущее значение из корзины заданному articleName, если да, подсчитайте сумму + 1 или добавьте новый товар в корзину.

Можете ли вы, может быть, помогите мне?

Спасибо заранее!

EDIT1 добавлен array_filter для получения текущего articleName

public function addToCart($id){

        $this->articleName = ($this->getArticleNamefromID($id)[0]["name"]);

        if ($_SESSION['cart'] == null){

            $array = ["articleName" => $this->articleName, "amount" => 1];
            array_push($_SESSION['cart'], $array);

        }else{

            foreach($_SESSION['cart'] as $key => $value) {

                $currentItem = array_filter(
                    $_SESSION['cart'], function ($e) use (&$searchedValue) {
                        return $e->articleName == $searchedValue;
                    }
                );

                //Check values
                echo $this->articleName. " vs. " . $currentItem;

                if($currentItem == $this->articleName){

                    $amountInc = $value["amount"] + 1;
                    $_SESSION['cart'][$key]["amount"] = $amountInc;

                }else {

                    $array = ["articleName" => $this->articleName, "amount" => 1];
                    array_push($_SESSION['cart'], $array);

                }

            }

        }

    }

1 Ответ

0 голосов
/ 26 мая 2020

Хорошо ... я решил это так:

public function addToCart($id)
    {

        $this->articleName = ($this->getArticleNamefromID($id)[0]["name"]);

        if ($_SESSION['cart'] == null) {

            array_push($_SESSION['cart'], ["articleName" => $this->articleName, "amount" => 1]);

        } else {

            if (!$this->articleInCart()){
                $array = ["articleName" => $this->articleName, "amount" => 1];
                array_push($_SESSION['cart'], $array);
            }

        }

    }

 private function articleInCart()
    {

        foreach ($_SESSION['cart'] as $key => $value) {
            if ($value["articleName"] == $this->articleName) {
                $amountInc = $value["amount"] + 1;
                $_SESSION['cart'][$key]["amount"] = $amountInc;
                return true;
            }
        }
    }
...