• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:cookieからのデータ取得に関して)

Cookieからのデータ取得方法について

このQ&Aのポイント
  • Cookieからのデータ取得方法についてお知らせします。
  • Cookieに設定した項目名と値を取り出す方法を説明します。
  • 配列に出力してからwhileループで取り出す方法を紹介します。

質問者が選んだベストアンサー

  • ベストアンサー
  • cojirou
  • ベストアンサー率50% (59/117)
回答No.2

#1です。ご返信を拝見いたしました。 どうしても、現在の文を生かしたいのであれば、 while(list($key,$val) = each($ary)){ if( $key%2 == 0 ) { echo $val . $ary[$key+1] ."<br>"; } } で、どうかな、と思います。 setcookie(項目名,値); でcookieにセットされた値は、 $_COOKIE["項目名"] = 値; または、 $HTTP_COOKIE_VARS["項目名"] = 値 となっていますから、$aryに値を移さなくても良いのなら、 私が先程書いた方法をそのまま使っていただければ、 ($_COOKIEを$aryに書き換えずに…) 私の方では動作します。 再度、失礼致しました。ご参考までに。

q-tip
質問者

お礼

ご回答ありがとうございます。 説明不足で申し訳ございません。 ひとつのcookie(test)に全ての項目と値を,でimplodeして突っ込んであるのですが、何か認識が間違っているのでしょうか? ユーザ側で選択した項目のみcookieに入れたいため項目名・項目数などがランダムになるのでこのような形を取っているのですが、根本から間違ってますか? 簡単に書くと setcookie(test,(項目名1,値1,項目名2,値2,項目名3,値3)) という形なのですが。 もしよろしければ教えていただければ幸いです。 #1ではだめでしたが、#2の形でできました。そうか!そうすればよかったのですね。こんな簡単に書けるとは。 本当にありがとうございました。

その他の回答 (2)

  • cojirou
  • ベストアンサー率50% (59/117)
回答No.3

再度、失礼致します。 >ひとつのcookie(test)に全ての項目と値を,でimplodeして突っ込んであるのですが… そういうことでしたか。理解不足でした。失礼致しました。 implodeしているということは、 $配列 = array(項目名1,値1,項目名2,値2,項目名3,値3,…) という配列をsetcookieする前に一時的に作っているのですよね? だとすれば、 foreach( $配列 as $key => $val ) {  if( $key%2 == 0 ) {   setcookie( $val , $配列[$key+1] );  } } とすれば、1つずつsetcookieできて、#1の方法が使えます。 しかし、cookieの数には制限があったと思うので、今回は 質問者様の方法が 優れてると思います。 余談ですが、ご記述中にある、 while(list($key,$val) = each($ary)){ も、foreachで書き換えることも可能と思います。 加えて、#2の訂正を。 >echo $val . $ary[$key+1] ."<br>"; ↓ $$val = $ary[$key+1]; とすれば、$項目名 = 値 となるはずです。 他にもっと良い方法があるかもしれませんのに、 勉強中の身で差し出がましい失礼を致しました。 ご参考までに。

q-tip
質問者

お礼

ご回答ありがとうございます。 何度も回答していただいた上にわざわざ補足いただき本当にありがとうございました。 $ary[$key+1] という形が思いつかなかったので本当に助かりました。 >cookieの数には制限があったと思うので、今回は質問者様の方法が優れてると思います。 でもcookieのサイズの制限もありますので、微妙なところではありますね。 本当にどうもありがとうございました。

  • cojirou
  • ベストアンサー率50% (59/117)
回答No.1

コレじゃダメでしょうか…。 foreach ($_COOKIE as $key => $val) { $$key = $val;  //これが$項目名 = 値;になるはず echo $key ." = ". $$key ."<br>"; } echoの1文は確認のために表示しているだけです。 的外れだったら失礼。 ご参考までに。

q-tip
質問者

お礼

ご回答ありがとうございます。 配列に出すと $ary[0]=項目名1 $ary[1]=値1 $ary[2]=項目名2 $ary[3]=値2 $ary[4]=項目名3 $ary[5]=値3 という形になっているので、教えていただいた形だとだめかと思います。配列への出し方が問題なのでしょうか? $ary[項目名1] = 値1 $ary[項目名2] = 値2 $ary[項目名3] = 値3 という出し方をすればいいのでしょうか? その場合どうすればいいのでしょう?