在PHP cookie中存储和检索数组

时间:2013-09-28 15:07:13

标签: php arrays cookies

我希望存储一些“虚拟”索引卡中的一些数据。每张卡都有正面和背面,用户可以存储多张卡。每一方都会有数据。

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中的更简单方法,那么数组位是有争议的,请告诉我。请注意:不建议存储在数据库中,因为这对项目来说不方便。 :)

3 个答案:

答案 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添加新卡

  1. 按上述方式加载数组
  2. $savedCardArray['CARD XX']=array('FRONT XX', 'BACK XX');
  3. 如上所述保存数组,但现在当然是$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

?>