• ベストアンサー

連想配列の値を可変変数にして、for文で書きたい

if($hoge['test_1']){ } if($hoge['test_2']){ } if($hoge['test_3']){ } if($hoge['test_4']){ } if($hoge['test_5']){ } ・上記をfor文で一気に書きたいです ・どう書けば良いでしょうか? for ($i = 1; $i <= 5; $i++) {  if($hoge['test_$i']){  } }

  • re97
  • お礼率80% (601/744)
  • PHP
  • 回答数2
  • ありがとう数10

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

  • ベストアンサー
  • wave117
  • ベストアンサー率100% (5/5)
回答No.2

シングルコーテーションの箇所をダブルコーテーションで書けばよいと思います。 for ($i = 1; $i <= 5; $i++) { if($hoge["test_$i"]){ } } ダブルコーテーションの内の変数は展開されるからです。 $i = 1; echo 'test_$i'; //=>test_$iが出力 echo "test_$i"; //=>test_1が出力 もしくは、文字列を結合したものもキーに使えます。 for ($i = 1; $i <= 5; $i++) { if($hoge['test_' . $i]){ } }

re97
質問者

お礼

回答ありがとうございました。 大変参考になりましたー

その他の回答 (1)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

>if($hoge['test_$i']){ 単引用符で括ると、変数は展開されません。変数を展開(parse)したければ二重引用符で括ってください。 http://php.net/manual/ja/language.types.string.php#language.types.string.parsing if($hoge["test_$i"]){ もしくは、文字列を結合して if($hoge['test_' . $i]){ です。 質問のタイトルにある「可変変数」を使う局面ではありません(可変変数を誤解しているとしか思えません)。 http://php.net/manual/ja/language.variables.variable.php

re97
質問者

お礼

回答ありがとうございました。 >可変変数を誤解しているとしか思えません ・誤解に気がつきました ・ご指摘ありがとうございましたー

関連するQ&A

  • for文を使って変数に値を入れる方法

    以下のプログラムでfor文を使ってx1に1, x2に2, x3に3を代入したいのですが、 変数x1~3をfor文を使って表す方法がわかりません。 下記のように var test = "x" + i; で変数testにx1という文字列を持たせ、そこにiを代入すれば上手くいくかなと思いましたが 上手くいきません。どのようにすれば期待通りになるか教えていただけないでしょうか。 ============================================ var x1 = 0; var x2 = 0; var x3 = 0; for(var i=1; i<=3 ; i++){ //x1に1, x2に2, x3に3を代入したい var test = "x" + i; test = i; } alert("x1=" + x1 + ",x2=" + x2 + ",x3=" + x3); ============================================

  • rubyで配列名をfor文で変更したい

    ruby(というかプログラミング)初心者です。 つまづいてしまったところがあり質問をさせていただきました。 hoge0、hoge1、hoge2 の3つの配列があります。 これをfor文の中で次のように利用したいと思いました。 for i in 0..2  hoge=hoge ??? i ←不明な点 (例)hoge=hoge0 としたい    ・    ・    ・ end つまり変数iを利用して配列名を順次変えていきたいのですがどうすればいいでしょうか。 hoge="hoge#{i}"としたら文字列hoge0が代入されるだけですし、hoge+iのような書き方もできません。 お時間あるときで結構ですのでお教えください。

  • for文の使い方

    for文の中にif文を入れて使いたいのですが「Nextに対するforがありません」となりエラーが出てしまいます。どうしたらよいのでしょうか? If Option1.Value = True Then For i = 2 To 10  If xlSheet.Cells(i, 2).Value > 10 Then Form2.List1.AddItem xlSheet.Cells(i, 1) Next i End If End If

  • PHPでのFOR文について

    こんにちは質問させていただきます。 ------------------------------------ for ($i = 1;$i<100;$i++) { if ($i < 10) { ※break; } echo($i); } ----------------------------------- 上記のようなFor文で$iが10より小さい場合、 次の$iに焦点をあわせたいのですが、 breakではなくてnext(?)みたいなのはありますか? 結果としては10~99までを表示したいと考えています。 別の文でかくことができるのはわかりますが、 next(?)みたいなものはないかとおもいまして・・・ 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • 配列の値をループ

    よろしくお願いします。 例えば、$ary=array(1,2,3,4,5,6,7); という配列があるとします。この1,2,3,4,5,6,7の値を ループで表現することは可能でしょうか?? for文で試してみましたが、 $hoge="for($i=0;$i<7;$i++){ print $i; }"; $ary=array($hoge); 表示結果 for($i= でした。""で囲んだのでそのまま文字としてなったんだと 思います。""をはずすとエラーになります。 理想の表示結果は当然 1,2,3,4,5,6,7です。 行いたいことの意図はわかっていただけたでしょうか? 可能な場合、どういう記述をすればうまくいくのでしょうか? それとも不可能なのでしょうか?よろしくお願いします。 環境 php4.4.4 apache2 winXP

    • ベストアンサー
    • PHP
  • 連想配列の配列の使い方

    C言語でいうところの構造体の配列(要素は"hoge"と"fuga"のみ)を perlで表現する場合、連想配列の配列にするのが一般的でしょうか? 以下の様なソースコードなのですが、perlらしさが失われている気がします。 perlらしく書くとしたらどう書くのが良いでしょうか? [ソース] @list; #この配列の要素に連想配列を入れる sub input{ #list.txtの中にはhogeとfugaの値がカンマ区切りで記入されている open(IN, "list.txt");  $i = 0; while ($xx = <IN>) { ($list[$i]{"hoge"}, $list[$i]{"fuga"}) = split /,/, $xx; $i++; } close(IN); } sub output{ for($i = 0; $i <= $#list; $i++){ print $list[$i]{"hoge"}, $list[$i]{"fuga"}; } }

    • ベストアンサー
    • Perl
  • for文~break

    break文に達した時、for文から抜けますか?それとも、if { }から抜けるんですか? for文はどこまで影響下にありますか? if ( i==5 ) printf ("サーバーが見つかりません"); まででしょうか? また  if ( i == 5 ) で5なら、実行としていますが、 6,や,8など5 以外でも、サーバーが見つかりません と if文が実行される見たいですが、なぜですか? 教えてください。 #include<stdio.h> int main(void) { int array[5][2]={ {1,14}, {2,28}, {3,19}, {4,8}, {5,15}, }; int sever; int i; printf("番号を入力してください"); scanf("%d",&sever); for( i=0 ; i<5 ; i++ ) if ( sever == array[i][0] ){ printf ( "%d 番には, %d 人います。\n",sever,array[i][1]); break; } if (i==5) printf("サーバーが見つかりません"); return 0; }

  • for文内での変数定義

    以前にC++の講義を受けた際に for(int i = 0; i < hoge ; i++){    int j;    ・    ・    ・ } のようなコードを書くと、jがhoge分だけ"生成されて しまう"のでよろしくありません。と教えられました。 しかし、最近別の方からこの部分に関しては、jをfor文の 中に定義しようが、最適化?によりfor文の外に出された バイナリが生成されると聞きました。そのため、jが 必要となる直前でjを定義しても(for文の中に定義しても) 問題ない。と教えられました。 どちらが正しいのでしょうか? 近年にC++の仕様変更があったとしたら、それに伴い 変更されたのでしょうか? また、どのようなコードが望ましいなどありましたら 教えてください。

  • 複数の変数宣言を、for文で一気にやる方法ってありますでしょうか?

    複数の変数宣言を、for文で一気にやる方法ってありますでしょうか? たとえば、tfという変数を3つ作りたいとき、 var tf1:TextField = new TextField(); var tf2:TextField = new TextField(); var tf3:TextField = new TextField(); ↑このように普通に書くのではなく for(var i:int=0; i<3; i++){  var this["tf" + i]:TextField = new TextField(); } ↑このようにfor文で一気に書こうとしたのですがエラーになります。 複数の変数宣言を、for文で一気にやる方法ってありますでしょうか? ご存知のかたいらっしゃいましたら、よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • Rubyで配列を使ったfor文の中に条件つきif文

    Rubyで配列を使ったfor文の中に条件付きのif文を入れてループさせたいのですが、基本的な構文が分かりません。 for i in array     if i == 9       array[i] << 'ア'     end end という雰囲気で書きたいのですが、どうしたらよいでしょうか。 i番目のループまで、配列のarrayを走査するにはどうすればよいでしょうか。 基礎的な質問ですみません。よろしくお願いします。