• ベストアンサー

変数名の連結

以下のような配列があるとします。 $str[0] = aaa; $str[1] = bbb; $str[2] = ccc; foreachでまわし変数名を連結し代入するというような事は可能なの でしょうか? foreach ($str as $key => $val) { //$keyをechoすると012と表示 //ここで変数名を$data0,$data1のようにしたいがうまくいかない $data . $key = $val; //配列にするぶんには正常に動作しました $data[$key] = $val; }

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

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

evalはいらないんじゃない? <? $str[0] = "aaa"; $str[1] = "bbb"; $str[2] = "ccc"; foreach ($str as $key => $val) { ${data.$key}=$val; } print <<<eof data0:{$data0}<br> data1:{$data1}<br> data2:{$data2} eof; ?>

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

その他の回答 (3)

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

>> foreachでまわし変数名を連結し代入するというような事は可能なの でしょうか? $data . $key = $val; 上記を下記に変更するだけです ${'data' . $key} = $val;

すると、全ての回答が全文表示されます。
  • will_a
  • ベストアンサー率22% (4/18)
回答No.3

>//ここで変数名を$data0,$data1のようにしたいがうまくいかない これをしたいなら、以下の方法でも可能かと。 foreach ($str as $key => $val) { ${data.$key} = $val; } No.1さんのような、専門知識は持ってませんので、悪しからず。

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

<? //Q.foreachでまわし変数名を連結し代入するというような事は可能なの //でしょうか? //A.可能か不可能かでいえば可能だが、絶対にやるべきではない。 //何としても素直に配列を使うべし。 $str[0] = "aaa"; $str[1] = "bbb"; $str[2] = "ccc"; //PHP 6でない場合は(binary)は要らない //keyが"[0]"だったとか、そういうケースへの対策はまったくしてない。 //eval関数を使う時には他にも考えることが山ほどある。 //http://oshiete1.goo.ne.jp/qa4279532.html foreach ($str as $key => $val) { eval('$data' . $key . "=" . "rawurldecode((binary)\"" . rawurlencode((binary)$val) . "\");"); } print($data0 . "\n"); print($data1 . "\n"); print($data2 . "\n"); //結果 //aaa //bbb //ccc ?>

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

関連するQ&A