PHPについて質問です。


次のように複数のセッションを実行したいです。
if(isset($_SESSION['word'])){$word = $_SESSION['word'];}
if(isset($_SESSION['meaning'])){$meaning = $_SESSION['meaning'];}
if(isset($_SESSION['idiom'])){$idiom = $_SESSION['idiom'];}

セッションの項目が増えたり減ったりするので、
項目が増減したら、それにあわせてセッションする数も手間なく増減できるよう、
下記のようにしたのですがうまくいきません。
$itemsS = array('word','meaning','idiom');

$i = count($itemsS);
for($m=0;$m<$i;$m++)
{
if(isset($_SESSION["$itemsS[$m]"])){$$itemsS[$m] = $_SESSION["$itemsS[$m]"];
}

配列の要素を増減したら、それにあわせてセッションする数も自動的に増減することは可能でしょうか?
できるとしたらどのようにしたらよいでしょうか?基本的な質問で恐縮ですがよろしくご回答ください。

環境は最新のVista Home Premium、最新のXamppのPHP5、プラウザはIE,Firefoxです。
以上、よろしくお願いします。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/05/01 13:08:08
  • 終了:2010/05/01 14:14:45

ベストアンサー

id:Bombastus No.2

ホーエンハイム回答回数409ベストアンサー獲得回数522010/05/01 13:35:14

ポイント35pt

ご質問のスクリプトを訂正すると、下記のようになります。

$i = count($itemsS);
for ($m = 0; $m < $i; $m++) {
    if (isset($_SESSION[$itemsS[$m]])) {
        $$itemsS[$m] = $_SESSION[$itemsS[$m]];
    }
}

また、foreach を使って書くと2行で済みます。

foreach ($itemS as $var)
    if (isset($_SESSION[$var])  $$var = $_SESSION[$var];
id:taroemon

ご回答ありがとうございます。

forを使った方はうまくいったのですが、どういうわけかforeachを使った方は私の環境だとうまくいきませんでした。

理由はわかりませんがそのままコピペすると「Parse error: syntax error, unexpected '$'」というエラーが出ます。

とはいえ上段のスクリプトではうまくいきました。

2010/05/01 14:14:36

その他の回答(1件)

id:araishi No.1

araishi回答回数7ベストアンサー獲得回数22010/05/01 13:32:10

ポイント35pt
$itemsS = array('word','meaning','idiom');
foreach($itemsS as $key => $value){
  if(isset($_SESSION[$value])){
    $$value = $_SESSION[$value];
  }
}
このような感じでしょうか!
id:taroemon

ご回答ありがとうございます。

うまく行きました。

2010/05/01 14:06:28
id:Bombastus No.2

ホーエンハイム回答回数409ベストアンサー獲得回数522010/05/01 13:35:14ここでベストアンサー

ポイント35pt

ご質問のスクリプトを訂正すると、下記のようになります。

$i = count($itemsS);
for ($m = 0; $m < $i; $m++) {
    if (isset($_SESSION[$itemsS[$m]])) {
        $$itemsS[$m] = $_SESSION[$itemsS[$m]];
    }
}

また、foreach を使って書くと2行で済みます。

foreach ($itemS as $var)
    if (isset($_SESSION[$var])  $$var = $_SESSION[$var];
id:taroemon

ご回答ありがとうございます。

forを使った方はうまくいったのですが、どういうわけかforeachを使った方は私の環境だとうまくいきませんでした。

理由はわかりませんがそのままコピペすると「Parse error: syntax error, unexpected '$'」というエラーが出ます。

とはいえ上段のスクリプトではうまくいきました。

2010/05/01 14:14:36
  • id:koriki-kozou
    koriki-kozou 2010/05/01 13:23:20
    >複数のセッションを実行したい
    >セッションする数

    セッションは1接続に1つ
    あなたの行っていることはセッション変数を複数持たせているだけ

    >配列の要素を増減したら、それにあわせて

    増減したら勝手に増えるというか、通常の配列のなんら変わりは無い

    >できるとしたらどのようにしたらよいでしょうか?

    ダブルクォーテーションで変数を囲う必要があるのかないのかをまずは学ぶとわかる


    回答権利が無いわりにはサービスしたほうだと思うよ
    あとは回答権利を持っている人のフォローを待つしかないね
  • id:taroemon
    koriki-kozouさん

    >回答権利が無いわりにはサービスしたほうだと思うよ
    私は「1ヶ月以内に10名以上から回答拒否されているユーザーの回答を拒否する」という設定にはしてますが、
    koriki-kozouさんを個人的に回答拒否にしていないことを明らかにしておきます。
    プロフィール欄を読むといろいろあったようでお気持ちは理解できますが、
    そんな事情の知らない人間も多くいるということを理解していただきたいです。

    いただいた情報は参考にします。コメントありがとうございます。
  • id:koriki-kozou
    koriki-kozou 2010/05/01 14:13:29
    コードだけ書けば簡単な話なんだけどね
    コメント欄で回答書くのは嫌われるようだからヒントだけにした
    「回答権利」はコードを書いてない言いわけ

    >個人的に回答拒否にしていないことを明らかにしておきます
    直接か間接かは調べていなかったのでメインアカウントと予備のサブアカウントに切り替えてみた
    メインアカウントは回答権利無し、他のサブアカウントは回答権利あり
    あなたは嘘を言ってますね

    おかげさまで私の回答を阻害している理由の1つが判明しました
    コメントありがとうございました
  • id:Bombastus
    #1の回答の後半のスクリプトに間違いがありました。括弧が1つ抜けていました。
    下記の通り邸で居します。

    foreach ($itemS as $var)
    if (isset($_SESSION[$var])) $$var = $_SESSION[$var];
  • id:taroemon
    koriki-kozouさん

    >あなたは嘘を言ってますね
    あらためて設定を調べてみましたがkoriki-kozouさん名義では回答を拒否してません。
    どういう事情があるか知りませんが、私は嘘を言ってませんよ。
    後味が悪いやりとりになるので、この件に関しては私からのお返事はこれで最後とさせていただきます。

  • id:taroemon
    Bombastusさん

    括弧抜けが原因でしたか。私が気づくべきでしたね。
    foreachの処理が知りたかったので、大変参考になりました。
    訂正のコメントありがとうございます。
  • id:SALINGER
    気になったので少しだけ。
    koriki-kozou さん
    >他のサブアカウントは回答権利あり
    ということは、直接拒否されていないということですよ。
  • id:taroemon
    SALINGERさん

    フォローありがとうございます。
    私もその辺の事情を詳しく知らなかったので参考になりました。
  • id:koriki-kozou
    koriki-kozou 2010/05/01 16:19:16
    id:SALINGERさん
    互いに確証の取りようが無いことだし伸ばす気はなかったんだけどね
    「嘘を言ってますね」と半疑問形にしているのもそのため

    サブとメインの関係は下記で調べた
    http://kataro-kai.g.hatena.ne.jp/task/3/24
    間接回答拒否はメイン・サブ間で連携しない
    私のメインはほぼ未使用のため他者から回答拒否を受けている可能性は限りなくゼロ
    (現時点でkoriki-kozouで回答してあるもの及び
    koriki-kozouがこの質問同様に回答拒否を受けているものを除けばグレーは無し)
    taroemonさんが私のメインを直接拒否している可能性も同様に限りなくゼロ

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません