Хранение и извлечение массива в PHP файле cookie
Я хочу хранить некоторые данные из некоторых "виртуальных" карточек. Каждая карта имеет переднюю и заднюю стороны, и пользователь может хранить несколько карт. На каждой стороне будут данные.
I ----------------- I I CARD 1 FRONT I I------------------I
I --------------- I I CARD 1 BACK I I-----------------I
I ----------------- I I CARD 2 FRONT I I------------------I
I --------------- I I CARD 2 BACK I I-----------------I
ОК, мои диаграммы немного испортились. Но вы получите сообщение.:)
Представьте себе это на диаграммах выше. Я хотел бы сохранить данные каждой карты (спереди и сзади) в файле cookie в виде массива (возможно), а затем иметь возможность вытащить каждое значение обратно и вставить его там, где это применимо (на другой странице).
В то же время помните, что пользователь может сделать столько карт, сколько им нравится. Я не могу использовать функции POST или GET. Бит массива является спорным, если вы можете подумать о более легком способе хранения этих данных в cookie, сообщите мне. Обратите внимание: не рекомендуется хранить в базе данных, так как это не будет удобно для проекта.:)
Ответы
Ответ 1
Используйте json_encode
/json_decode
для получения/установки массивов в файлах cookie.
Тест-массив
$cardArray=array(
'CARD 1'=>array('FRONT I', 'BACK I'),
'CARD 2'=>array('FRONT 2', 'BACK 2')
);
конвертировать и писать файл cookie
$json = json_encode($cardArray);
setcookie('cards', $json);
сохраненная строка выглядит так:
{"CARD 1":["FRONT I","BACK I"],"CARD 2":["FRONT 2","BACK 2"]}
вернуть файл cookie
$cookie = $_COOKIE['cards'];
$cookie = stripslashes($cookie);
$savedCardArray = json_decode($cookie, true);
показать восстановленный массив
echo '<pre>';
print_r($savedCardArray);
echo '</pre>';
выходы
Array
(
[CARD 1] => Array
(
[0] => FRONT I
[1] => BACK I
)
[CARD 2] => Array
(
[0] => FRONT 2
[1] => BACK 2
)
)
Edit
Если вы задаетесь вопросом о stripslashes
, это потому, что фактически сохраненная строка
{\"CARD 1\":[\"FRONT I\",\"BACK I\"],\"CARD 2\":[\"FRONT 2\",\"BACK 2\"]}
setcookie
добавляет \
перед поисками, чтобы избежать их. Если вы не избавитесь от них, json_decode
завершится с ошибкой.
Изменить II
Чтобы добавить новую карту в файл cookie
- загрузить массив, как указано выше
-
$savedCardArray['CARD XX']=array('FRONT XX', 'BACK XX');
- сохраните массив, как указано выше, но теперь, конечно,
$savedCardArray
, а не $cardArray
.
Ответ 2
Serialize/Unserialize работает как более простая альтернатива json_encode/json_decode
setcookie ('cookiename', serialize (array),...) для сохранения в cookie.
array = unserialize ($ _ COOKIE ['cookienam]) для извлечения массива.
Ответ 3
Играйте с чем-то вроде этого
<?php
$card_id = '123';
$value = 'im a black lady';
setcookie("card[$card_id][front]", $value);
// reload page to actually read the cookie
echo $_COOKIE['card'][$card_id]['front']; // im a black lady
?>