• ベストアンサー

変数のパターン処理パート3

すみません、以前  http://oshiete1.goo.ne.jp/kotaeru.php3?q=1456597 でも質問していますが セッションの初期化の段階で HTMLの様々なname属性の属性値で指定した$_SESSIONの値を解放してやりたいんです.name属性の属性値は、全てダブルクオーテーションで囲んであります. そして  <tag1 name="name1" …>  <tag2 name="name2" …>   …  <tagX name="nameX" …> などとなっていた場合 unsetの記述は以下です.  unset($_SESSION["name1"]);  unset($_SESSION["name2"]);   …  unset($_SESSION["nameX"]); です.これをfor文で書くには,おそらく次のようになります.  for($i=1;$i<X+1;$i++){  unset($_SESSION["name".$i]);} ですが,私は,この記述に対しては,次のような疑問を持っています. 疑問1. ["name".$i] でなく ['"name'.$i.'"']とすべきではないか この疑問を解消する説明を見つけることができずに悩んでます.その説明あるいは,その説明が書いてあるサイトを教えていただけないでしょうか.

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

  • ベストアンサー
回答No.4

着目して欲しい所は変数の型ではなく、"と'そのものです。 変数とエスケープシーケンス(\n)が展開されるかどうかです。 何故、PHPではこういった仕様なのかといった疑問には当方は答えられません。

参考URL:
http://cai.cs.shinshu-u.ac.jp/sugsi/Lecture/php/php/6-print.html
SariGEnNu
質問者

お礼

ご回答ありがとうございます. えーとですね、質問の意味は $i==1のとき、 "name".$i は "name1" と同じなのでしょうか? ということです.単にPHPパースはそのように処理するからという理由でしょうか?否でしょうか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

もともとPHPには型がありませんからこの場合は普通に文字列の結合になりますね "name".$i => "name"."1"($iが1の場合) => "name1"

SariGEnNu
質問者

お礼

ご回答ありがとうございます. えっ、PHPには型がありませんのですか?私は,型はあるけど,宣言しなくても,代入値から自動で型を判断すると思っていました. パース規則について調べるようにしていきたいと思います.

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

"PHP 変数のパース"をキーワードに検索してみてください。 "と'の違いについて理解が深まると思います。 簡単なprint文におきかえて考えてみてもいいと思います。

SariGEnNu
質問者

お礼

ご回答ありがとうございます.PHP 変数のパースをPHP 変数のパースで調べてみましたが,まだ,よく分りませんでした.ただ、問題の本質はPHPのパース(処理系)にありそうです. 1. "文字列データ".整数データ は全体として   "文字列データ" とPHPはみなすのか? 2. 1.のようなルールは環境変数の中でも通用すルールなのでしょうか? 3. 1.のルールは使用の推奨がなされている安心できるものなのか? ということに絞られてきそうです.

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

まずは質問前に、該当するPHPのマニュアルぐらい読んでるんでしょうか? ずばり書いてあります。

参考URL:
http://www.php.net/manual/ja/language.types.array.php
SariGEnNu
質問者

お礼

ご回答ありがとうございます. 参考URLを一応,読みましたが,よく理解する必要があります. 特に関係ありそうな内容について考えてみます. これは、PHPパーサのデータ形式の認識と関連付けられそうに思えますが.とりあえず,関係ありそうなところをピックアップしたいと思います. 下位互換性の維持のために未定義の定数は同じ名前の文字列に自動的に 変換されるため、このコードは動作します。 それから、"name"という文字列と$iのint型を格納する変数の連結 "name".$i は 全体として文字列型として認識されるという理解 ですが、もっと直接説明が書いてある部分がわかりませんでした.直接書いてある部分を指して頂けるとありがたいです.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 変数のパターン処理パート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.\']);} こうでなくどう直せばいいかせめて、ヒントだけでも教えていただけないでしょうか. この直し方だと可変変数は関係ないようにも思えますが、 本当は関係あると考えられるのでしょうか?

    • ベストアンサー
    • PHP
  • PHPでSESSIONによる変数の引き継ぎ

    PHPで問い合わせフォームを作ろうと勉強し始め、とりあえず簡単なものをと思っているのですが、入力フォームを作り次にチェックフォームへ移動した段階で以下の記述を入れています。 <?php session_start(); $_SESSION['name'] = $_POST['name']; echo htmlspecialchars($_SESSION['name']); ?> そしてチェックフォームの次のページで内容をメールで送るつもりなのですが、 チェックフォームから次のメールを送るページに移動した段階で <?php session_start(); echo htmlspecialchars($_SESSION['name']); ?> と記述しても、作成しているMacbookair2014では表示されているのですが、 スマホやWindowsでは表示されません。 どの環境でもチェックフォームまでは表示されているので、最後の引き継ぎがきちんと出来ていないだけだと思うのですが、何が足りないのでしょうか? 分かりにくい文章で申し訳ありませんが、どなたかお分かりの方ご回答よろしくお願いします。 情報が足りなくて分からない場合はすぐに答えます。

    • 締切済み
    • PHP
  • ループ処理

    HTMLのID属性、name属性をループで回したいと 考えています。 ***イメージ*** <TABLE> <TR> <?php $count = 0; for($a = 0; $count < 20;$count++){ ?> <TD> <SELECT id = "ABC" name = "Nuryoku[]"> print "<option value =<?php echo $count?>$count</option>"; </SELECT> </TD> </TR> SELECTとOPTIONタグが20個必要であり、それぞれ ID属性のABCを1~20、name属性Nuruyoku[]を1~20 ループでまわしたいと考えています。 (例) ABC1 Nuruyoku1[]    から ABC20 Nuruyoku20[] このような事が可能なのでしょうか? もし可能であればアドバイスをよろしくお願い致します。

    • ベストアンサー
    • PHP
  • Excelで変数名に変数を使用(前はできたのに…)

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=614375 で以前も教えていただいたんですが、なぜかできなくて…。 Sub Hensuu() For i = 1 To 5 Gyou(i) = i * i MsgBox Gyou(i) Next i End Sub と試しにしてみたんですが、 「コンパイルエラー:  Sub または Function が定義されていません。」 と出てしまいました。 どこがいけないのでしょうか?

  • セッション変数の破棄について、いまひとつスッキリしない部分があります。

    セッション変数の破棄について、いまひとつスッキリしない部分があります。どなたか詳しい方是非ご教授お願いいたします。会員サイトからログアウトするときは、$_SESSION=array(),session_destroy(),そしてクッキーの削除で処理をしてきました。特に問題なく動作をしておりますが、もしログアウト でunset($_SESSION[hogehoge])のように変数を破棄した場合、他のuserの$_SESSION[hogehoge]も削除されてしまうのでしょうか?この部分が、ず~っと疑問に残り解決できませんでした。PCが複数 台あれば、実験してたりかめることもできるのですが1台しかないのでそれができません。ネット上で ずいぶん検索して調べましたが、そこら辺のところをスッキリと理解できるように説明されたページも 見当たらないようでした。もしよいWEBがありましたら、そちらのWEBを紹介していただく形でも結構です。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 名前に変数を入れたい

    print "$in{'name_1'}"; print "$in{'name_2'}"; print "$in{'name_3'}"; 上記の名前の部分に変数を入れて下記のようにしたいのですが、方法がわかりません。 for(1..3) { $i++; print "$in{'name_$i'}"; } また、フォームから送信されてくる名前=$in{'name'} の読み名がわからないのですが、これは変数とは違いますか?どのように呼ぶものなのでしょうか? 説明下手で申し訳ないのですが、宜しくお願いいたします。

    • ベストアンサー
    • Perl
  • VBAの変数は何故「i」から始まることが多い?

    最近、エクセルVBAを始めたものです。 サイトや解説本でいろいろな記述を見たのですが、私が見た限りでは全ての例で、最初に出てくる変数は「i」で表現されていました。 そして次に出てくる変数は「j」。 (例えば、 For i = 1 to 10 ・・・・ Next i とか) 26あるアルファベットからたまたま「i」が選ばれた?にしては、数多くの解説本やサイトで「i」が使用されているので疑問に思いました。 変数を表すのに、例えば「a」「b」「c」……としても何ら問題にならないと思うのですが…… 「i」にしているのには何か理由があるのでしょうか。

  • 変数について

    htmlのソース上に変数をセットして外部javascriptでその変数を使いたいと考えています。 if(f[i].name.match(/変数を入れる/) ↑外部javascriptの//の間に変数を入れたいのですが、 外部ファイルと、htmlソースにはどのように書けばいいのでしょうか。 一応、講座等をみながら適当に以下のようにしてみましたが、駄目でした。 htmlソース <script type="text/javascript"> <!-- var myWord = "Hello"; // --> </script> <script type="text/javascript" src="name.js"> ↑の外部スクリプトには以下のように記述 if(f[i].name.match(/myWord/) javascriptはほとんど知識がないため、うまく説明できていないかもしれませんが、よろしくお願いいたします。

  • HTMLとJavascriptの汎用的な書き方について

    HTMLのタグにid="namae"とすれば、Javascriptでdocument.getElementByIdを使って平面状に(すべてdocumentの下?)でアクセスできるので、 getElementByIdは便利かなと思っているのですが、 タグで name属性を使ってアクセスする場合と、 id属性でgetElementByIdでアクセスする場合の どちらが今後一般的になるのでしょうか? nameは昔から?あったようなので、切り捨てるのも 気になりますが、記述の面で両方書くと手間なので、 id属性で一本化しても問題ないでしょうか?

  • javascript 初心者です 変数について

    javascript 初心者です 変数について html内のbodyに次のように記述しています。 <script type="text/javascript"> <!-- var hensu1=7; var hensu2=2; var hensu3=5; var hensu4=4; for(i=1;i<=4;i++){ document.write("<div>"); for(j=1;j<="hensu"+i;j++){ document.write("<img src='sample.png'/>"); } document.write("</div>"); } --> </script> for(i=1;i<=4;i++)でdivを4つ並べ、 その中にそれぞれsample.pngをhensu分だけ並べ対のですが、 for(j=1;j<="hensu"+i;j++)の部分で "hensu"+i の記述の仕方が分からず、 上記の書き方だと表示されません。 正しい書き方を教えていただけないでしょうか?