在PHP cookie中存储和检索数组

728*_*902 17 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
Run Code Online (Sandbox Code Playgroud)

好的,我的图表搞砸了一下.但是你得到了消息.:)

想象一下上面的图表.我想将每张卡的数据(正面和背面)存储在一个cookie中,作为一个数组(可能),然后能够将每个值拉回并在适当的位置插入(在不同的页面上).

同时,请记住,用户可以制作任意数量的卡片.我不能使用POST或GET功能.如果您能想到将这些数据存储在cookie中的更简单方法,那么数组位是有争议的,请告诉我.请注意:不建议存储在数据库中,因为这对项目来说不方便.:)

dav*_*rad 43

使用json_encode/ json_decode来获取/设置cookie中的数组.

测试数组

$cardArray=array(
    'CARD 1'=>array('FRONT I', 'BACK I'),
    'CARD 2'=>array('FRONT 2', 'BACK 2')
);
Run Code Online (Sandbox Code Playgroud)

转换并写入cookie

$json = json_encode($cardArray);
setcookie('cards', $json);
Run Code Online (Sandbox Code Playgroud)

保存的字符串看起来像这样

{"CARD 1":["FRONT I","BACK I"],"CARD 2":["FRONT 2","BACK 2"]}
Run Code Online (Sandbox Code Playgroud)

把饼干拿回来

$cookie = $_COOKIE['cards'];
$cookie = stripslashes($cookie);
$savedCardArray = json_decode($cookie, true);
Run Code Online (Sandbox Code Playgroud)

显示已恢复的数组

echo '<pre>';
print_r($savedCardArray);
echo '</pre>';
Run Code Online (Sandbox Code Playgroud)

输出

Array
(
    [CARD 1] => Array
        (
            [0] => FRONT I
            [1] => BACK I
        )

    [CARD 2] => Array
        (
            [0] => FRONT 2
            [1] => BACK 2
        )

)
Run Code Online (Sandbox Code Playgroud)

编辑
如果你想知道stripslashes,那是因为实际保存的字符串是

{\"CARD 1\":[\"FRONT I\",\"BACK I\"],\"CARD 2\":[\"FRONT 2\",\"BACK 2\"]}
Run Code Online (Sandbox Code Playgroud)

setcookie加上\之前quoutes逃避它们.如果你没有摆脱那些,json_decode将失败.


编辑二

向cookie添加新卡

  1. 像上面一样加载数组
  2. $savedCardArray['CARD XX']=array('FRONT XX', 'BACK XX');
  3. 如上所述保存数组,但现在当然$savedCardArray不是$cardArray.