Я хочу хранить некоторые данные из некоторых «виртуальных» карточек. Каждая карта имеет переднюю и заднюю стороны, и пользователь может хранить несколько карт. На каждой стороне будут данные.
I ----------------- II CARD 1 FRONT I I------------------I I --------------- II CARD 1 BACK I I-----------------I I ----------------- II CARD 2 FRONT I I------------------I I --------------- II CARD 2 BACK I I-----------------I
Хорошо, мои диаграммы немного перепутались. Но вы получите сообщение. 🙂
Представьте себе это на диаграммах выше. Я хотел бы сохранить данные каждой карты (спереди и сзади) в файле cookie, как массив (возможно), а затем иметь возможность вытащить каждое значение обратно и вставить его там, где это применимо (на другой странице).
В то же время помните, что пользователь может сделать столько карт, сколько им нравится. Я не могу использовать функции POST или GET. Бит массива является спорным, если вы можете подумать о более легком способе хранения этих данных в cookie, сообщите мне. Обратите внимание: не рекомендуется хранить в базе данных, так как это не будет удобно для проекта. 🙂
Используйте json_encode
/ json_decode
для получения / установки массивов в 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 ) )
редактировать
Если вы задаетесь вопросом о 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
. Сериализация / Unserialize работает как более простая альтернатива json_encode / json_decode
setcookie ('cookiename', serialize (array), …) для сохранения в cookie.
array = unserialize ($ _ COOKIE ['cookienam']) для извлечения массива.
Играйте с чем-то вроде этого
<?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 ?>