18

いくつかの「仮想」インデックス カードからデータを保存しようとしています。各カードには表と裏があり、ユーザーは複数のカードを収納できます。各面にはデータがあります。

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

OK、私の図は少しめちゃくちゃになりました。しかし、あなたはメッセージを受け取ります。:)

上の図から想像してみてください。各カードのデータ (前面と背面) を配列 (おそらく) として Cookie に保存し、各値を引き戻して、必要に応じて (別のページに) 挿入できるようにしたいと考えています。

同時に、ユーザーは好きなだけカードを作成できることに注意してください。POST または GET 関数を使用できません。配列ビットについては議論の余地があります。このデータを Cookie に保存する簡単な方法があれば教えてください。注意: プロジェクトにとって都合が悪いため、データベースに保存することはお勧めしません。:)

4

3 に答える 3

46

json_encode/を使用json_decodeして、Cookie の配列を取得/設定します。

テスト配列

$cardArray=array(
    'CARD 1'=>array('FRONT I', 'BACK I'),
    'CARD 2'=>array('FRONT 2', 'BACK 2')
);

クッキーを変換して書き込む

$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\それらをエスケープするために引用符の前に追加します。それらを取り除かないjson_decodeと失敗します。


編集Ⅱ

クッキーに新しいカードを追加するには

  1. 上記のように配列をロードします
  2. $savedCardArray['CARD XX']=array('FRONT XX', 'BACK XX');
  3. 上記のように配列を保存しますが、もちろん今では$savedCardArrayありません$cardArray
于 2013-09-28T15:47:14.193 に答える