- ベストアンサー
文字列(配列)を変数として使いたい
PHPいつまでたっても初心者の者ですm(__)m 以下のようなことをしたいのですが、方法がわかりません。 ------- $code01[1] = "000"; $code02[1] = "020"; $code03[1] = "030"; $code01[2] = "001"; $code02[2] = "021"; $code03[2] = "031"; for ($i=1; $i<=2; $i++) { while ($cnt <= 3) { $cnt = $cnt + 1; if (strlen($empcnt) == 1) { $cnt2 = "0".$cnt; } else { $cnt2 = $cnt; } $codes = "code".$cnt2."[".$i."]"; <--- こんな感じのことがしたいのですが echo $$codes; <--- これだとうまくいかない } } ------- 期待する結果 000 020 030 001 021 031 ------- 出力方法が知りたいです。 よろしくお願いしますm(__)m
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでやります。 <?PHP $code01[1] = "000"; $code02[1] = "020"; $code03[1] = "030"; $code01[2] = "001"; $code02[2] = "021"; $code03[2] = "031"; for ($i=1; $i<=2; $i++) { $cnt=1; while ($cnt <=3) { $cnt2 = ($cnt<=9?"0":"").$cnt; $codes = "{${"code".$cnt2}[$i]}"; if($codes!="") echo $codes; $cnt++; } } ?>
その他の回答 (2)
- ryouchi
- ベストアンサー率41% (52/125)
質問の意図がよくわからなかったので、 全く外しているかもしれませんが・・・ -------------------- <?php // 配列 $code01 = array(); $code02 = array(); $code03 = array(); // 値をセット $code01[1] = "000"; $code02[1] = "020"; $code03[1] = "030"; $code01[2] = "001"; $code02[2] = "021"; $code03[2] = "031"; // 繰り返す for($j = 1 ; $j <= 2 ; $j++){ for($i = 1 ; $i <= 3 ; $i++){ // eval評価用の変数を無理矢理作る $x = '$code0'.$i."[".$j."]"; // evalする eval ("echo \"$x<br/>\";"); } } ?> -------------------- 参考 http://jp.php.net/manual/ja/function.eval.php ちなみに、全くお薦めのやり方ではありません・・・
お礼
説明がわかりにくくすみませんでした。 evalも使ってみたのですがやり方が悪かったらしく うまくいきませんでした。 ryouchiさんのやり方だとうまくいきそうですね。 試してみます。
- Tasuke22
- ベストアンサー率33% (1799/5383)
for のところから for($i=1; $i<=2; $i++){ echo($code01[$i]."<br>"); echo($code02[$i]."<br>"); echo($code03[$i]."<br>"); } 以上です。 コーディングで気になる点が幾つかあります。 ・配列を0から使わない(どうでもいいと言えば、いいのですが) ・$cntを初期化していないのに計算している ・$i++ や $cnt=$cnt+1 のようにコーディングスタイルがごっちゃ ・変数名を動的に生成しようとしている。PHPって出来たかな? 出来る言語はありますが、PHPで必然性を感じたことが無いですが。
お礼
教えてもらいたかったのはまさにこれです! 私の説明不足や抜けがある中意図を汲み取ってご回答頂けて感激です! >$codes = "{${"code".$cnt2}[$i]}"; このような記述は知らなかったので勉強になりました。 >$cnt2 = ($cnt<=9?"0":"").$cnt; 二桁にするのもこっちのほうがすっきりですね。 DBから取り出した項目名が01~20まであったもので、べたに記述して いたのですが、おかげですっきりしました。 ありがとうございましたm(__)m