Я борюсь с некоторыми упражнениями с корзиной ... Я хотел бы иметь одну функцию, которая заботится обо всех моих добавляемых элементах 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);
}
}
}
}