В PHP существуют только массивы, которые используются как для ассоциативных, так и для численных индексированных карт / списков / массивов. Javascript / JSON имеет два разных понятия: числовые индексированные массивы ([...]
) и карты объектов ({ foo : ... }
). Для PHP json_encode
, чтобы решить, что использовать при кодировании массива, есть некоторая логика за кулисами. Как правило, если ключи массива смежны и все численные, массив кодируется в массив JSON ([...]
). Если есть даже один ключ не в порядке или нечисловой ключ, вместо него используется объект JSON.
Почему ваши манипуляции с массивом, в частности, запускают объект, я не знаю. Чтобы этого избежать, вы можете сбросить ключи массива, чтобы убедиться, что они численно, смежно проиндексированы:
$_SESSION['cart_items']['cartitems'] = array_values($_SESSION['cart_items']['cartitems']);