Пытаюсь создать PHP корзину, но он ведет себя некорректно. На этапе добавления присутствует проверка, если товар существует в $_SESSION, то просто добавить к нему единицу. Если же товар отсутствует, то полностью записать информацию. Проблема в том, что данный код, а точнее, функция set() просто добавляет в сессию id и количество предмета, а сумму игнорирует. И как бы сделать так, чтобы при добавлении товара, каждый раз создавалась отдельная строка в массиве $_SESSION? Далее код:
class Cart {
public function init(){
if(!isset($_SESSION)){
session_start();
}
if(!isset($_SESSION['card_items'])){
$_SESSION['card_items'] = array();
}
}
public function set($id, $price){
if($_SESSION['card_items']['id'] = $id)
{
$_SESSION['card_items']['qty']++;
}
else
{
$_SESSION['card_items']['id'] = $id;
$_SESSION['card_items']['price'] = $price;
$_SESSION['card_items']['qty'] = 1;
}
}
public function get(){
foreach ($_SESSION as $temp){
//echo $temp."<br />";
print_r($temp);
}
}
}
$cart = new Cart;
$cart->init();
$cart->set(5, 2000);
$cart->get();
Бывает. Проблема с присвоением была. Здесь я не проверял условие, а присваивал переменную.
$_SESSION['card_items']['id'] = $id
а надо
$_SESSION['card_items']['id'] === $id
Минус одна проблема. Теперь как создать присвоение каждому товару новую строку в массиве?
class Cart {
public function __constructor()
{
if (!isset($_SESSION)) {
session_start();
}
if (!isset($_SESSION['card_items'])) {
$_SESSION['card_items'] = [];
}
}
public function set($id, $price)
{
if (array_key_exists($id, $_SESSION['card_items'])) {
$_SESSION['card_items'][$id]['qty']++;
} else {
$_SESSION['card_items'][$id] = ['price' => $price, 'qty' => 1];
}
}
public function get()
{
foreach ($_SESSION as $temp) {
//echo $temp."<br />";
print_r($temp);
}
}
}
$cart = new Cart();
$cart->set(5, 2000);
$cart->set(5, 2000);
$cart->get();
Получаем
Array ( [5] => Array ( [price] => 2000 [qty] => 2 ) )
Сборка персонального компьютера от Artline: умный выбор для современных пользователей