変数の添え字をforで処理する方法

このQ&Aのポイント
  • 変数の添え字をforループで処理する方法について教えてください。
  • 質問者は添え字を含む変数をforループで処理しようとしていますが、エラーが発生しています。
  • 質問者のコードにはシンタックスエラーがあります。解決策を教えてください。
回答を見る
  • ベストアンサー

変数の添え字をforで処理する方法。

変数の添え字をforで処理する方法。 今朝、 http://okwave.jp/qa/q6000492.html で質問させていただき、この方法は解決したのですが、 $_POST[hensuu1] $_POST[hensuu2] .... と言う場合に、今朝の方法を応用して、 for ($n=1; $n<=10; $n++){ echo $_POST[{'hensuu'.$n}]; } と記述しても旨く処理できずに、 Parse error: syntax error, unexpected '{', expecting ']' in ・・・・・ のようなエラーが出てしまいました。 解る方いらっしゃいましたらご教授お願い致します。 よろしくお願いします。

  • macus
  • お礼率76% (331/433)
  • PHP
  • 回答数4
  • ありがとう数6

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

  • ベストアンサー
  • mpx
  • ベストアンサー率71% (149/209)
回答No.4

>> for ($n=1; $n<=10; $n++){ >> echo $_POST[{'hensuu'.$n}]; >> } {'hensuu'.$n} この中カッコ{}は変数名の塊を示すために 使用します。今回は変数名では無く、連想配列のKEYなので ただの文字列です。よって、単に下記に変更するだけです for ($n=1; $n<=10; $n++){ echo $_POST['hensuu'.$n]; }

macus
質問者

お礼

ありがとうございます!!!!こういうシンプルな方法を望んでいました。 セキュリティ的にはまずい(?)のかもしれませんが、ソースが凄くシンプルになるので助かります。 ありがとうございました!!

その他の回答 (3)

回答No.3

>…と言う事は、ある配列($array)に、hensuu1,hensuu2,.....を入れておいて、 >でも、そうすると、$arrayに入れるときにやはり面倒な気がします。今回の例は10個ですが、実際はもっと沢山ある場合があります。 何故そんな捻くれた使い方? #2の人の回答の使い方で良いのに何故そんな使い方? >設計の問題とは??このままで使うと何か不味い事が起こってしまうのでしょうか? 後からのメンテナンスの事や仕様変更になったときのことを考えましょうね。 >使用者は私を含め社員のみなので大丈夫だと思いますが・・・。 ローカルにサーバをおいて外部からのアクセスは遮断した環境か? セキュリティーもだけど それと上でも書いたけど後からのメンテナンスでも$_POSTを直接扱うと仕様を拡張しようとしたり したときに苦労するぞ。

macus
質問者

お礼

再度回答ありがとうございます! 複雑に考え過ぎていました…(汗 確かにメンテナンス・拡張するときに不便ですね…。 #2のyambejpさんの回答の方法で現在試みてます。 ただ、上から順に表示されてしまうので、ちょっと困ってます。 tanaka1,tanaka2,....,tanaka10 suzuki1,suzuki3,....,suzuki10 と10種類以上あって、yambejpさんの方法で抽出すると、ばらばらに出てきてしまいます(汗) それを旨く処理する方法を模索中です。 これも多次元配列とかで解決できるのかな? 色々、親切に教えていただきありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

基本的にユーザーからPOSTされたデータは汚染されているものと考えてください。 それを理解したうえであれば単純にPOSTデータを表示するのはこんな感じです。 foreach($_POST as $key=>$val){ print htmlspecialchars($key).":".htmlspecialchars($val)."<br>\n"; }

macus
質問者

お礼

早速の回答ありがとうございます。 汚染??そいうセキュリティー的な部分はまだまだ勉強不足です。。。 今のところ、使用者は私を含め社員のみなので大丈夫だと思いますが・・・。 なるほど、なるほど~。こういう使い方をすると、上から順にformのnameとvalueが表示されるんですね。上から順番と言うのがちょっと曲者ですが…、狙ったやつを抽出したいので、ちょっと工夫が必要そうですね。 ありがとうございます。

回答No.1

forでわざわざ処理するって事はforeach知らないの? ついでに言うと http://okwave.jp/qa/q6000492.html の質問だけどそういう使い方の設計に問題があるよ。 素直に多次元配列にすればすむ問題だと思うけどね。

macus
質問者

お礼

早速の回答ありがとうございます。 foreachは一応使ってます。配列を一個ずつ処理するやつですよね? …と言う事は、ある配列($array)に、hensuu1,hensuu2,.....を入れておいて、 foreach ($array as $val){ echo $_POST[$val]; } とするってことですか? でも、そうすると、$arrayに入れるときにやはり面倒な気がします。今回の例は10個ですが、実際はもっと沢山ある場合があります。 foreachを使った他の旨い方法があるならご教授お願いします。 確かに前回の質問は多次元配列で旨く行きそうですね!! ありがとうございます!! 設計の問題とは??このままで使うと何か不味い事が起こってしまうのでしょうか?

関連するQ&A

  • 変数の中の数字をforで指定したい。

    変数の中の数字をforで指定したい。 配列として、 $sort1[$t] $sort2[$t] ... $sort10[$t] と1~10と添え字をつけた変数を扱うときにfor等の繰り返し関数を使って利用したいのですが、旨く行きません。 for ($n=1; $n<=10; $n++){ $hensuu = '$sort' . $n . '[$t]'; echo $hensuu; } となどとして、$sort1[$t]、$sort2[$t]・・・に入っているデータを表示したいのですが、表示されるのは、 $sort1[$t] $sort2[$t] ・・・ となります。 どうすれば、この変数に入っている値を表示できるのでしょう? この例では10個までしか無いので、forを使わずに全部書いてしまえば良いのですが… 沢山あるときに、シンプルに処理できると助かります。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 変数名を変数で指定するのに$_POST[

    http://oshiete1.goo.ne.jp/qa2691790.html の#1さんに,変数名を変数で指定できることを教わりました. 下記の3行目のように,です. for ($i=1;$i<=5;++$i){ if (${"var".$i}=="") { ${"errMsg".$i}=$i."が未入力"; } } ここで, (1) $_POST["form"] には「str」という文字列が入っています. (2) $Var には「10」という数値が入っています. (3) これらを結合し, どうしても $_POST["str10"] みたいな変数を作らなければならないのですが, ・<? echo $_POST["str" . $Var]; ?>では何も起こらず. ・<? echo $_POST[{"str" . $Var}]; ?>などと{}で括っても, Parse error: parse error, unexpected '{', expecting ']' in C:\temp.php on line 10. みたいなエラーになります. どういうのが正しい書き方でしょうか?

    • 締切済み
    • PHP
  • PHP 関数呼び出し後に配列添字をつけたい

    以下のコードの「echo fetch() ['id']」はうまくいく環境とそうでない環境があるようです。 <?php function fetch(){ $date = array('id' => 'JO783', 'name' => 'Taro'); return $date; } echo fetch() ['id']; // JO783と表示されることを期待しています ?> fetch()は連想配列を返すので、['id']を指定することで、JO783というidが取り出せると思いますが、localhostで開いた環境ではうまくいきますが、借りているレンタルサーバーでは Parse error: syntax error, unexpected '[', expecting ',' or ';' in phptest/index.php on line 7 とエラーが出ます。 PDOのfetchをイメージして作っています。PDOで $dbh->query($sql)->fetch()['id']みたいに、一気に値を取得したいです。

    • ベストアンサー
    • PHP
  • PHPですが、エラーがでます。下記の問題があるよう

    なんですが、どこがいけないのでしょうか? $sql = "insert into menber(name,passward) values($_POST["name"]."','".$_POST["passward"].)";//SQL文の作成 ?> エラーはParse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in です。よろしくお願いいたします。

  • 【初歩】 極単純なFOR文がなぜ「parse error」になるのかわかりません…

    下記のサンプルが,どう見直しても Parse error: parse error, unexpected T_VARIABLE in C:\hoge.php on line 2(2行目とは$str1 = "1";のこと). となってしまうのですが,なぜでしょうか. 下記は質問向けにアレンジしたものですが 本番環境の方では少しメッセージが異なり: Parse error: parse error, unexpected T_FOR in C:\hoge.php on line xxx. と,まあいずれでもエラーになってしまうのですけど・・・ <? php $str1 = "1"; $str2 = "2"; $str3 = "3"; for ($Num = 1; $Num <= 3; $Num++) { echo ${"str" . $Num}; } ?>

    • ベストアンサー
    • PHP
  • Sinatra syntax error

    あるコードの一部なんですがエラーが出てしまいます。 どのように解決すればいいでしょうか よろしくお願いします。 a.rb:5: syntax error, unexpected ',', expecting tASSOC @defeat = {rock::scissors, paper::rock, scissors::paper} ^ a.rb:5: syntax error, unexpected '}', expecting '='

    • ベストアンサー
    • Ruby
  • PHP  date関数を変数に代入

    下記のようにerror_log関数に、日付やホスト名を出力させようようとしています。 $log_messageに、date関数や_SERVER変数を入れたいのですが、構文エラーとなります。 Parse error: syntax error, unexpected '(', expecting ',' or ';' … -------------------- private static $log_message = date("Y/m/d l H:i:s")."\n".$_SERVER["REMOTE_ADDR"]; (中略) error_log(("【info】".self::$log_message.$log), 3, $log_file_path); -------------------- 「"」の前を全て\でエスケープしたり、$log_message = date('YmdHis')を試したのですが、 同様でした。 記述方法で誤りがあれば、どなたかご指摘頂きたいです。

    • ベストアンサー
    • PHP
  • PHPのエラーについて

    データベースから出力し、リンクをつけたいと考えていますが、下記のようなエラーが出力されます。 どのように対応すれば解消されるでしょうか? データベースにはthread_idという項目は存在します。 echo から始まる列が38行目にあたります。 よろしくお願いします。 【コード】 <?php $sql = "SELECT * FROM thread WHERE category_id =1"; $date = mysql_query($sql,$link); while ($post = mysql_fetch_assoc($date)) { $thread_id = $post['thread_id']; echo '<br>' . '<a href="thread.php?id=<?php echo htmlspecialchars($post['thread_id']); ?>">' . $post['thread_title'] .'</a>'.'<br>'; } ?> 【エラー】 Parse error: syntax error, unexpected 'thread_id' (T_STRING), expecting ',' or ';' in C:\xampp\htdocs\index.php on line 38

    • 締切済み
    • PHP
  • 三項演算子/echoとprintの違い

    <?php $sex=1 ? echo "男性" : echo "女性"; ?> だと、下記エラーになりました。 Parse error: syntax error, unexpected T_ECHO 試しに、 <?php $sex=1 ? print "男性" : print "女性"; ?> としたところ、無事表示されました。 echoとprintって同じだと認識していたのですが、 何が違うのでしょうか? あと、$sex=1ではなく、 $sex==1とした方がよいのでしょうか?

    • ベストアンサー
    • PHP
  • 何故unexpected ';'が出るのでしょうか

    お尋ねします。以下のスクリプトを書いてブラウザで表示しようとすると Parse error: syntax error, unexpected ';' in C:\xxx om\test.php on line 11   とエラーが出ます。 11行目は ?> と書いてあります。 <?php ~ ?> の対応関係も合っていると思います。 何故、unexpected ';' エラーが出るのでしょうか? どこが間違っているのでしょうか? 不具合修正はどのようにすれば良いか、ご教示いただければ有難いです。よろしくお願いいたします。 <html> <body> <?php if ( $_REQUEST[ "SUBMIT" ] != "" ){ $month=$_POST['month']; $day=$_POST['day']; $memo=$_POST['memo']; if( ($month=='') | ($day=='')){ echo                  ?>      ←ここでsyntax エラー <HTML><BODY> <FONT COLOR="RED"><B>空欄です</B><BR><BR> </FONT><BR></BODY></HTML> <?php exit(); } } ?> </body></html>

    • ベストアンサー
    • PHP

専門家に質問してみよう