- ベストアンサー
変数のパターン処理パート2
前回、http://oshiete1.goo.ne.jp/kotaeru.php3?q=1456597でも質問して可変変数などの意味は理解したつもりでいますが、次のことがなぜかわかりませんでした というより上手くいきませんでした. 間違っているところを指摘していただけると助かります. あるコードの一部で unset($_SESSION['parameter1']); unset($_SESSION['parameter2']); unset($_SESSION['parameter3']); unset($_SESSION['parameter4']); unset($_SESSION['parameter5']); の部分を次のように替えるとエラってしまいます for($i=1;$i<6;$i++){ unset($_SESSION['Parameter'.$i.\']);} こうでなくどう直せばいいかせめて、ヒントだけでも教えていただけないでしょうか. この直し方だと可変変数は関係ないようにも思えますが、 本当は関係あると考えられるのでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
ああそうか、構造体の意味はちょっと違うような気もするのですが、でもまあ、PHPでは配列のキーとして文字列を使う事ができる、と考えていいです。 で、文字列であればPHPの場合"や'で括るのがルールです。括ってなければ数値か定数(defineで定義したもの)として扱われます。 $array["key"]/普通の文字列をキーとした配列 $array[KEY]/KEYという定数。どこかでdefine("KEY","key")の形式で定義をした定数として扱う。定義が無ければKEY=NULLになってしまうんじゃないかな。 $array[$key]/変数$keyの中身をキーとする配列。$keyの値が文字列であれば文字列をキーとした配列になるし、数値であれば普通の配列になる $array[0]/数値をキーとした配列 バリエーションとしてはこんな感じかな。 先日からいくつか質問を見ていると、根っ子のところの誤解が実際のコーディングの時の問題になってるような気がしますよ。それと、その誤解の原因がオリジナリティあふれる解釈にあるような気がするので、できるだけ思い込みを排して、素直に考えるようにした方が良いと思います。
その他の回答 (5)
- wakame0729
- ベストアンサー率32% (245/765)
1)文字列の連結についての基本を確認して下さい。 2)その、本に載っていたというサンプルコードは完全に動作しましたか?見た感じ間違いが多数あるように思うのですが。こちらに転記する際のミスなのかな、とは思いますが。 3)>としてしまうと、やはり$nameIDの部分でダメだと思います. 何がダメなのかがわかりません。 挙げられているサンプルコードに間違いが多すぎて、何をどう説明すればいいのか判りません。このサンプルコード自体、動作を理解してないでしょう?まずはこのサンプルコードを完全に理解してから、for文に書き直すような応用に入ってはいかがですか? それと、また一問一答、個人授業のようになってます。質問が最初とは違っているので、別な質問を立てて下さい。
お礼
ありがとうございます. 1)本などで確認します. 2)本に書いてあったものは一応、 エラーが見つからない(=正しいと思われる)動作を してることを見ました. まちがいがいくつか見受けられました、m(__)mです. $nameID="name"."$ID"; は正しくは、$nameID="name".$ID; value=$i でなく value=0から99の整数などです もう少し確認して、わからない所を絞ってきます.
- wakame0729
- ベストアンサー率32% (245/765)
なんか、いまいち納得してない雰囲気を感じるんですが(^^;。 先の回答の参考URLを見て、「配列とは何ぞや」を理解して下さい。 $_POST,$_GET,$_SESSIONなどの変数は「配列」です。その添字(キー、インデックス)に、フォームのタグのnameが使われる、という事です。 一応フォローしておきますが、以前に比べると着実にやってる事も質問も進化しているとは思ってますよ(^^)。
お礼
ありがとうございます. 私の理解が至らないばかりにご期待に応えられなくてすみません(←何も期待してないですよね^^;). 一応、#3の参考URLも見ていますが、まだまだ、理解に苦しいので、少しずつ見ていき、何がわからないのかをハッキリさせたいと思います. それと別に、PHPではインデックスが文字列でも配列と言うんですね! 例えば、Cでは、添え字がintのものを配列といって、それ以外の範囲の添え字も扱おうとするときは、配列でなく、構造体という言い方をしますが. まあ、これは、PHPの場合、そういう意味(=添え字がint以外でも配列で扱える)だと思ってればいいですよね. すいません、後よく分らないことがありました. $_SESSION[]の中が''や""で囲ってある場合とそうでない場合があります.この違いはどういう風に理解しておけばいいんでしょうか?
- wakame0729
- ベストアンサー率32% (245/765)
>$_SESSION[]の[]が変数を意味しているからという関係なんだと思いました. すみません、ちょっと意味がわからないのですが・・・。 $_SESSION変数は単なる配列です。で、この場合は配列の文字列の添字が使われています。つまり[]の内側は単なる文字列と考える事ができます。 そしてここでする事は$iに格納されている数値を使って"parameterX"という文字列を作るだけです。"parameter"という文字列と$iの数値の文字列を連結するだけですよね。そう考えると「"parameter".$i」が正解だという事が理解できると思いますが、いかがですか?
お礼
ありがとうございます. >>$_SESSION[]の[]が変数を意味しているからという関係なんだと思いました. >すみません、ちょっと意味がわからないのですが・・・。 すみません、あまりきちんと理解してないことから発せられた言葉だと思います. $_POST,GET,REQUEST,COOKIE,SESSIONなどの[]の中は外部からの値を取得するから[]の中に$マークはないですが、変数のように思ってしまいました. 単に文字列の連結ということで理解しておきます
- wakame0729
- ベストアンサー率32% (245/765)
この場合は$iより後ろの文字が不要だからです。仮に$iに1が入ってたとすると、"parameter'.$iで"parameter1"と同じ意味になります。
お礼
ありがとうございます. ということはやはり、$_SESSION[]の[]が変数を意味しているからという関係なんだと思いました. あれから、私も少し考えてみたのですが、そういう解釈にしておこうと思います.これからもよろしくお願いします.
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
試してないのですが .\' がいらないのでは?
お礼
ありがとうさまさまです. .\' を削除したら直ってしまいました. これは、どういうことなのだろうと思いますが、 また、調べてみます.
お礼
ありがとうございます.いろいろ、あれこれ悩んでいたら、参考にしている本のソースコードを見て、やはり、行き詰まっていました.簡単に本に書いてあることを抜粋します. $list=mysql_query('select name from employee order by income top=100'); $nameID="name"."$ID"; $_SESSION["$nameID"]=" selected"; echo"<select name=name> <option value=$i $_SESSION[name000]> mysql_result($list,0,"name") </option> <option value=$i $_SESSION[name001]> mysql_result($list,1,"name") </option> … <option value=$i $_SESSION[name099]>" mysql_result($list,99,"name") </option></select>"; 本ではこんな感じになっています. ($_SESSIONの中は定数です) それで、私は上のコードの<option の000~099までの部分を for文を使って書き直したいです. for($i=0;$i<100;$i++){ echo"<option value=$i $_SESSION["$nameID"]> mysql_result($list,$i,"name")</option>";} としてしまうと、やはり$nameIDの部分でダメだと思います. 例えば、for文の{}の中で、 define("name".$i,""); $nameID=name.$i; をechoの前に入れてやったりする必要があるんでしょうか?いろいろ試してみましたが、結果はおおむねフォームに選択項目が表示されない結果になってしまいます. すみません、やはり、これは本のソースコードの内容について解釈が間違っている結果なんでしょうか?