• ベストアンサー

変数名の連結

以下のような配列があるとします。 $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; }

  • dcx147
  • お礼率33% (214/636)
  • PHP
  • 回答数4
  • ありがとう数0

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

  • ベストアンサー
  • 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

  • 多次元配列?配列のキー?変数の型?

    PHP勉強中のものです。 予定通りの動作にならんく四苦八苦しています。 どのように修正すれば予定通りになるのか考え方のアドバイスなどお願いします。 処理したいこと 変数$xxxの先頭の文字と最後の文字をsubstr()で取り出し$aaaと$bbbに別けそれぞれ代入しキーとして多次元配列に代入した配列要素を指定してechoで出力したい 試してみたこと $aaa1と$bbb1に直接整数を代入してみたところ、echoで出力された キーになる変数を整数型として変数に代入してみたが希望通りの動作にならなかった。 なにかアドバイス頂けると助かります。 $array = array( "0" =>array("あいうえお","かきくけこ"), "1" =>array("さしすせそ") ); $xxx = "0-1"; $aaa = substr($xxx,0,1); $bbb = substr($xxx,2); $aaa = (int)$aaa; $bbb = (int)$bbb; echo $array[$aaa][$bbb]; //出力されない $aaa1 = 0; $bbb1 = 1; echo $array[$aaa1][$bbb1]; //出力された $aaa = (int)$aaa; $bbb = (int)$bbb; echo $array[$aaa][$bbb]; //出力されない

    • ベストアンサー
    • PHP
  • 文字列を配列定義に使用するには

    文字列を配列の定義に使用したいのですが、可能でしょうか? 具体的には以下のような内容です。  $AAA = array("name"=>"山田","val"=>"10"); とすると変数$AAAは配列になります。  $BBB = 'array("name"=>"佐藤","val"=>"20")'; とすると変数$BBBは文字列になります。  $CCC = $BBB; と変数$CCCに代入した場合に、 変数$CCCを配列として認識させたいです。 つまり  print $CCC[name]; //佐藤  print $CCC[val]; //20 というように出力させたいのですが、 根本的に可能なのでしょうか…? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • テーブルデータ表示

    mysqlからデータをphpで取得し以下のような多次元配列になっています。 Array ( [0] => Array ( [id] => 116 [name] => あああ ) [1] => Array ( [id] => 58 [name] => いいい ) [2] => Array ( [id] => 89 [name] => ううう ) ) 単純にデータを表示させたく以下のようにしましたが<th>$key2</th>の箇所が上記配列の場合 2回繰り返されて表示されてしまいます。ここはフィールド名なので1回の表示でいいのですが どのように記述すれば思うような表示になるでしょうか? echo "<table border=\"1\">"; echo "<tr>"; foreach ($tmp1 as $key => $val) { foreach ($val as $key2 => $val2) { echo "<th>" . $key2 . "</th>"; //フィールド名 } } echo "</tr>"; foreach ($tmp1 as $key => $val) { echo "<tr>"; foreach ($val as $key2 => $val2) { echo "<td>" . $val2 . "</td>"; // 取得したデータをある分だけ繰り返し } echo "</tr>"; } echo "</table>";

    • ベストアンサー
    • PHP
  • Batにおける変数について

    はじめまして。 どなたかご教授願います。 @echo off set AAA=( +8000896 - +8000551 ) = 345 set BBB=28 set CCC1=%AAA:~28% #set CCC2=%AAA:~"%BBB%"% #行の部分の変数定義が行えません。 "や`、\を組み合わせてみましたが CCC1のような 結果にはならず悩んでおります。 お手数ですが、ご回答の程お願い致します。

  • cshで変数名の入れ子ができない

    こんなことをしたいと考えています。 --------------------- set aaa="bbb" set bbb="ccc" echo $aaa echo $bbb echo $($aaa) --------------------- 期待する実行結果としては、 --------------------- bbb ccc ccc --------------------- という感じです。 エラーになってしまうのですが、何かいい逃げ方はありませんか? cshでなくてshでも構いません。 よろしくお願いします。

  • 出力結果がないときの処理方法

    何もかもが初心者です。 どういう風に質問すればよいのかもわからないので理解しづらいものがあるとは思いますが、あたたかいご回答、よろしくお願いいたします。 只今、データベースとPHPを使ってWEBページを作っているのですが、データベースに検索結果がないときの表示方法でつまづいています。 <?php $data = array("aaa","bbb","ccc"); foreach ( $data as $val ): if( $val == ddd ): echo <<<EOM "<p>$val</p>"; EOM; else: echo "<p>該当データがありません</p>"; endelse; endif; endforeach; ?> このようにすると、「該当データがありません」が3つ続けて出てきてしまうのです。 1つしか出さないようににする方法を教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • [bash]ファイル内の変数名を値に変換したい

    bashです。 環境変数に例えば以下の変数が設定されているとします。 VAL1="aaa" VAL2="bbb" aというファイルに以下が記載されているとします。 ${VAL1} ${VAL2} aというファイルを読み込んだ際に、 ${VAL1}を"aaa"、${VAL2}を"bbb"と読み替えて読み込む方法はありますか。 変数のパターンは事前に分からないので、 '${VAL1}'を"aaa"に置換する、とかの方法はなしです。 evalを使えばうまくいきそうな気がするのですが、うまくいきませんでした。 > cat a | eval ⇒何も出力されない。 何か分かる方教えてください。

  • foreach文について、今朝、回答いただいて、その時は分かったつもり

    foreach文について、今朝、回答いただいて、その時は分かったつもりだったのですが、 やっぱりよく分かっていなかったようなので、もう一度質問させてください。 今朝質問した内容は、下記です。 ▼配列の要素の値をループ中に変更して確認したいのですが、   http://okwave.jp/qa/q5943567.html 例えば、下記例のとき、上記と挙動が異なるのは、なぜでしょう? このforeachでは、値を書き換えできないので、 そもそも、上記と比較をしてはいけないのでしょうか? $arr = array("値1", "キー1" => "値2", "値3"); foreach($arr as $val){ $val = "{$val}の値利用"; echo $val."<br />"; } foreach($arr as $val){ echo $val."<br />"; } 1)$arrの内容を$valにコピー 2)$valに値を代入 3)$valを表示 4)1)へ戻る で、特に分からないのが、以下です。 上のforeachで、 代入後の値が表示されるのは、 なぜでしょうか。 今朝質問した「$arr as $key => $val」 のときと比較して、 どなたか解説していただけないでしょうか?

    • ベストアンサー
    • PHP
  • 変数名を $_ にしたくない

    &xxx("AA","BB"); sub xxx{print @_} ↑のソースで sub に @_ という名前の配列に 引数を渡すことができたけど、@z という名前の配列に 引数を渡したい場合はどういうソースになるんですか? {print @_} は {print @_;} のようにセミコロンを 書いてあるのが普通だと思うけど、このような場合は セミコロンを省略して問題があったりしますか? 下の foreach についても $_ というのを $z にするには どういうソースにしたらいいか教えてください。 $xx{"A"}= "aaa"; $xx{"B"}= "bbb"; $xx{"C"}= "ccc"; foreach(keys %xx){print "添え字は$_で値は$xx{$_}<br>"}

    • ベストアンサー
    • CGI
  • explode時の改行コードでtrim以外の方法

    aaa bbb ccc というテキストデータ(改行あり)を読み込み、explodeで配列に入れる操作を行ったのですが、cccのところで改行コードも代入されてしまいます。trimでとれたのですが、毎回このような事を行うのは汚く感じるのですが、他に方法はありませんでしょうか? よろしくお願いいたします。 <?php $data = file("./a.txt"); $aa = explode( " ", $data[0] ); echo strlen($aa[0])." "; echo strlen($aa[1])." "; echo strlen($aa[2])."<br>"; echo $aa[0]." "; echo $aa[1]." "; echo $aa[2]."<br>"; $ab=trim($aa[2]); echo strlen($ab)."<br>"; ?> 実行結果 3 3 5 aaa bbb ccc 3

    • ベストアンサー
    • PHP

専門家に質問してみよう