配列の値を可変変数を用いて取得する方法について

このQ&Aのポイント
  • 配列の値を可変変数を用いて取得する方法について調査しました。
  • 可変変数を用いた配列の値の取得方法についての問題があり、解決策を求めています。
  • PHPで配列の値を可変変数を使って取得する方法についての詳細な説明をお願いします。
回答を見る
  • ベストアンサー

配列の値を可変変数を用いて取得する方法について

配列の値を可変変数を用いて取得する方法について 下記のようなソースがあるのですが、$tmp1_1zのような変数の場合、可変変数を用い取得する事は出来たのですが、$hairetsu["tmp2_1z"]のような配列の場合、可変変数を用い取得する事は出来ませんでした。 どちらの例の場合も、$varの中には意図した文字が取得できていると思うのですが、$$varの結果が異なり、どのように記述すれば配列の場合も可変変数の値が取得できるか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 【ソース】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>title</title> </head> <body> <?php $tmp1_1z = 1; $hairetsu["tmp2_1z"] = 2; $i = 1; $var = 'tmp1_' . $i . 'z'; echo "<p>var=" . $var . "</p>"; echo $tmp1_1z; // 下記は値が取得できます。 echo "<p>\$var=" . $$var . "</p>"; $var = 'hairetsu["tmp2_' . $i . 'z"]'; echo "<p>var=" . $var . "</p>"; echo $hairetsu["tmp2_1z"]; // 下記は値が取得できません。 echo "<p>\$var=" . $$var . "</p>"; ?> </body> </html> 以上、よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5078/13272)
回答No.1

配列の添字だけ変数化するのなら $var = 'tmp2_' . $i . 'z'; echo "<p>var=" . $var . "</p>"; echo $hairetsu["tmp2_1z"]; // 下記は値が取得できません。 echo "<p>\$var=" . $hairetsu[$var] . "</p>"; でいけますね。

iroha_168
質問者

お礼

ご回答ありがとうございます。 ご教示いただいたソースで意図した動作となりました。 このたびはどうもありがとうございました。 以上、よろしくお願いします。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

こんなのとか: $hairetsu[ 'tmp2_1z' ] = 2; $avar = 'hairetsu'; $a = ${$avar}; echo $a[ 'tmp2_1z' ], "\n";

参考URL:
http://www.ideone.com/OYgHb
iroha_168
質問者

お礼

ご回答ありがとうございます。 参考URLに記載していただいたソースで意図した動作となりました。 このたびはどうもありがとうございました。 以上、よろしくお願いします。

関連するQ&A

  • DOSバッチで変数の値を変数名に設定したいのですが、可能でしょうか?

    DOSバッチで変数の値を変数名に設定したいのですが、可能でしょうか? 例として、以下のようにVARという変数に対して、ある文字列を設定し、その文字列の名前の変数の値を別の変数に代入したいのです。 set VAR="TMP" if /i "%VAR%"=="TMP" (SET TEST=%%VAR%%) echo %TEST% ここで求めている挙動は、SET TEST=%%VAR%%の命令によって SET TEST=%TMP% → SET TEST=C:\Windows\Temp のように展開されればいいのですが、実際はSET TEST=%VAR%となってしまいます。 なにか良い方法がないでしょうか?

  • document.locationで変数使用したい

    document.locationに変数の値を使用しようとしたのですが、どうすればできるかわからなかったので、アドバイスいただける方がいらっしゃいましたら、ご教示の程、よろしくお願いします。 なお、下記がサンプルソースとなりますが、js_urlにPHPで取得した値は入っております(alertで確認しました)。 その為、本件はPHPとJavaScriptの連携の問題ではなく、document.location内で変数を使用する際の書き方に問題があると思います(ブラウザ上で確認した所、「'document.location = "http://oshiete.goo.ne.jp/"'」と出力されていれば動作するのではと思いますが、「'document.location = js_url'」と出力されており、変数の中身が展開されていませんでした(シングルクォーテーションで囲まれている為、変数と認識していないと思われますが、どう記述変更すればよいか分かりませんでした))。 【ソースコード】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Sample</title> <?php $php_url = "http://oshiete.goo.ne.jp/"; ?> <script type="text/javascript"> window.onload = function() { // setTimeout('document.location = "http://oshiete.goo.ne.jp/"', 2000); var js_url = "<?php echo $php_url; ?>"; alert(js_url); setTimeout('document.location = js_url', 2000); } </script> </head> <body> <p>Sample</p> </body> </html> 以上、よろしくお願いします。

  • 変数名をプログラム中で作成して値を取り出す方法

    perlで変数名をプログラム中で作成して、その変数の値へアクセスする方法は、どのようにしたらよいのでしょうか? 例えば以下のスクリプトで、var_valueという変数名をプログラムで生成し、その値「12345」を取り出したい、というものです。 ================================ #! /usr/bin/perl $var_value ="12345"; $tmp1 = "var"; $tmp2 = "value"; $tmp3 = $tmp1."_".$tmp2; # $tmp3にvar_valueという文字列を作成              # print "tmp3 is $tmp3";  # 本当は$tmp3自体ではなく、$var_value=12345を取り出したい。。。 ================================ 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • 返り値の配列中の1つの値のみ受け取りたい。

    関数で、例えば配列型を返す関数oshiete()があるとします。 これを個別の関数に割り当てる場合は以下のようになります。 list($var1, $var2, $var3) = oshiete(); あるいは $vars = oshiete(); $var1 = $vars[0]; $var2 = $vars[1]; $var3 = $vars[2]; もし返ってくる配列中の値のうち、1つだけ取り出したい場合は以下のようになります。 $var1 = oshiete(); $var1 = $var1[0]; しかし、ここで2行書くのが無駄に思えて仕方がありません。 1行目の「$arr = 」に続けて、関数oshiete()の値を1つだけ取り出す方法って無いのでしょうか?「$arr = oshiete()[0];」のような書き方は駄目でした。 あと、もし2行で書く方法し無い場合、関数oshiete()が1つの値を取り出すことだけが目的で、かつそれ以降使うことが無い場合、配列を一旦変数$var1に入れて次にその変数に上書きする形で値を代入する方法は、メモリ消費量などの観点から見ると有用でしょうか?他で使わないなら別の変数名を容易するのは無駄に思えます。

    • 締切済み
    • PHP
  • phpでreadfile(include)した結果に?が出力される

    phpで以下のようなA,Bの2つのファイル構成にした際に ブラウザでAをアクセスし、ソースを表示するとreadfileした結果の前に「?」が出力されます。 「?」と出力されるのが何か問題だと思うのですが、分かりません。 ご指南をお願いいたします。 ?<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> Aファイル <?php readfile('inc/xhtml.inc'); include('inc/dbcon.php'); include('inc/cm468_2.inc'); ?> ----------- Bファイル <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> -------------------------------- 出力結果 ?<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">

    • ベストアンサー
    • PHP
  • 配列内の値の取得について

    FlashBuilderです。 例1のようにすると問題なく取得できるのですが、 例2のようにするとobject,objectという値が返ってきてしまいます。 例2の配列内の値を参照するにはどのようにすれば、宜しいでしょうか? 例1: var myAry:Array=[]; myAry.push("a","b"); Alert.show(myAry[0]); 例2 var myAry:Array=[]; myAry.push({index:0, souce:"a"}); myAry.push({index:1, souce:"b"}); Alert.show(myAry[0]);

    • ベストアンサー
    • Flash
  • 文字の見た目の長さを取得する方法について

    文字の見た目の長さを取得し、全角■(半角■×2)に収まっているかチェックしようと思い、下記のソースを記述したのですが、特定の文字で意図した結果になりませんでした。 【ソース】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>title</title> </head> <body> <?php $array = array( "1234567890" // 1. 10とカウントしたい , "12345" // 2. 10とカウントしたい , "侉侉侉侉侉" // 3. 10とカウントしたい , "※※※※※" // 4. 10とカウントしたい , "112233" // 5. 9とカウントしたい ); for($i=0; $i<count($array); $i++) { // 3がNG echo strlen(mb_convert_encoding($array[$i], 'SJIS', 'UTF-8')); echo "<br />"; // 4がNG echo mb_strwidth($array[$i], 'UTF-8'); echo "<br />"; echo "<br />"; } ?> </body> </html> 【結果】 10 10 10 10 5 10 10 5 9 9 http://hamamuratakuo.blog61.fc2.com/blog-entry-421.htmlのUTF-8の日本語のバイト数が原因かもと思ったのですが、どうすれば文字の見た目の長さを取得できるか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • bashで変数に追記

    bashで、変数に改行も含めて追記したいです。 具体的には echo $Var AA のとき、何か処理を行うことで echo $Var > /tmp/file less /tmp/file AA BB ・ ・ ・ としたいです。 わからなポイントとして以下の2点です。 1.bashでの変数への追記 2.リダイレクトしたものをlessで見るときに、 less /tmp/file AA BB ・・・・ となってしまわないこと です。 ご教授願えたらと思います。

  • document.body.scrollTop の数値が正常に取得できない

    とあるJavascriptを組んでいるのですが、document.body.scrollTopの値が取得できず困っています。 検証の結果、下記のプログラムだと数値が取得できず、1行目の<!DOC...>を削除すると正常に取得することができます。 スタイルシートを多用している関係で、1行目を削除してしまうと他のレイアウトが崩れてしまうため、これ以外で正常に動かす方法はないでしょうか? 検証ブラウザ:IE6.0.2900、Firefox 1.52 ============== <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> <title>TEST</title> </head> <body> <p>&nbsp;</p> <p>&nbsp;</p> 【中略】 <p>&nbsp;</p> <p><a href="javascript:alert(document.body.scrollTop);">document.body.scrollTopの数値を表示</a></p> </body> </html>

  • メンバ変数に関して

    現在、C++にてプログラム作成しております。 1点プログラミングを行っている中で疑問になった点があります。 アイデア・方法等があれば教えて頂けると幸いです。 現在、メンバ変数として配列を定義したプログラムを作成しております。 そのメンバ変数を同クラス内のたくさんのメソッドから呼び出して処理を行っているのですが、そのメンバ変数の配列数を固定配列数ではなく、可変な配列数にしたいと考えております。 プログラムの実行後に取得した値をメンバ変数の配列数にしたいのです。 このように、メンバ変数の配列数の可変可を実施することは可能でしょうか?

専門家に質問してみよう