Почему не массив возвращается(как исправить ошибки)
<?php
var_dump(json_decode($_COOKIE['history_lots']));
if (isset($_GET['tab']) and $_GET['tab'] == 'lot' and !in_array($_GET['id_lot'], json_decode($_COOKIE['history_lots']))){
setcookie('history_lots', json_encode((json_decode($_COOKIE['history_lots']))[] = $_GET['id_lot']), strtotime('next year'), '/');
}
Ответы (1 шт):
Автор решения: Егор Банин
→ Ссылка
Пока вы разбираетесь с переводчиком, дам вам полезный совет как работать с суперглобальными массивами.
Не используйте суперглобальные массивы как переменные. Не передавайте их в функции, не сравнивайте их. Всегда создавайте переменную, которой присваивайте значение из суперглобального массива и дальше работайте только с этой переменной.
Присваивать удобно с помощью оператора объединения с null:
$tab = $_GET['tab']?? '';
if ($tab === 'lot' ...) {...}
Этот простой приём позволит вам избежать множества глупых ошибок (например, что случится, если кук ещё нет?).
<?php
$historyLotsJson = $_COOKIE['history_lots']?? '[]';
var_dump($historyLotsJson); // интереснее взглянуть, что там за json
$historyLots = json_decode($historyLots);
$tab = $_GET['tab']?? '';
$idLot = $_GET['id_lot']?? '';
if ($tab === 'lot' and !in_array($idLot, $historyLots)) {
$historyLots[] = $idLot;
setcookie('history_lots', json_encode($historyLots), strtotime('next year'), '/');
}
Видите? Переменные делают ваш код проще. Даже если в коде или в данных будет ошибка, разобраться с проблемой будет легче.
