我希望存储一些“虚拟”索引卡中的一些数据。每张卡都有正面和背面,用户可以存储多张卡。每一方都会有数据。
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中的更简单方法,那么数组位是有争议的,请告诉我。请注意:不建议存储在数据库中,因为这对项目来说不方便。 :)
答案 0 :(得分:43)
使用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
)
)
修改强>
如果你想知道stripslashes
,那是因为实际保存的字符串是
{\"CARD 1\":[\"FRONT I\",\"BACK I\"],\"CARD 2\":[\"FRONT 2\",\"BACK 2\"]}
setcookie
在quoutes之前添加\
以逃避它们。如果你没有摆脱这些,json_decode
将会失败。
编辑II
向Cookie添加新卡
$savedCardArray['CARD XX']=array('FRONT XX', 'BACK XX');
$savedCardArray
而不是$cardArray
。答案 1 :(得分:3)
序列化/反序列化可以作为json_encode / json_decode的简单替代
setcookie('cookiename',serialize(array),...)保存到cookie。
array = unserialize($ _ COOKIE ['cookienam'])来检索数组。
答案 2 :(得分:1)
玩类似的东西
<?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
?>