如何在PHP cookie中存储和检索数组?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (27)

我正在寻找从一些'虚拟'索引卡存储一些数据。每张卡都有正面和背面,用户可以存储多张卡片。每边都会有数据:

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中,作为一个数组(可能),然后能够将每个数值拉回并在适当的位置插入(在不同的页面上)。

提问于
用户回答回答于

使用json_encode/ json_decode在cookies中获取/设置数组。

测试阵列:

$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['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
用户回答回答于

序列化/取消序列化是json的一个更简单的替代方案。_编码/json_解码器

setcookie(“炊事名称”,序列化(数组),...)保存到cookie。

数组=非序列化($_小甜饼“烹饪”)检索数组。

扫码关注云+社区

领取腾讯云代金券