• ベストアンサー

連想配列の可変変数

<?php $test[a][b][c] = "成功"; $string = 'test[a][b][c]'; echo ${$string}; ?> このコードで"成功"を出したいのですが上手くいきません 恐らく可変変数ではブラケットを文字列として扱ってしまっているのが原因だと思います どうにかうまくこれを可変変数のように上手く実現させる方法はないでしょうか?

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

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

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

evalを使うならreturnで戻すと汎用性があがります。 ただ配列の使い方もちょっとへんなので一部修正 <?php $test["a"]["b"]["c"] = "成功"; $string = 'test["a"]["b"]["c"]'; echo eval("return isset($$string)?($$string):null;"); $string = 'test["a"]["b"]'; echo eval("return isset($$string)?($$string):null;"); $string = 'test["x"]["y"]["z"]'; echo eval("return isset($$string)?($$string):null;"); ?>

その他の回答 (1)

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

<?php $test[a][b][c] = "成功"; $string = 'test[a][b][c]'; $com = "echo $" . $string . ";"; eval($com); ?> 使用上の注意をよく読んで正しくお使いください。 http://php.net/manual/ja/function.eval.php

関連するQ&A

  • PHPから文字列を変数に割り当てたい

    変数aにPHPから文字列や空文字を割り当てたいのですが、 次のようなコードだと http://ideone.com/dHmbVY 「b is not defined」や「Unexpected token」といったエラーが出てしまいます・・・ 次のように var a = <?php echo 3 ?>; 文字列じゃなくて数字ならエラーが出ずに済むのですが、 どのように記述すればPHPから文字列を割り当てるとこができるのでしょうか?

  • 連想配列を含むヒアドキュメントの書き方

    連想配列を含むヒアドキュメントの書き方を教えてください。 以下のコードならうまく行きました。 -(1)-------------------------- $SS = $_SERVER['PHP_SELF']; $html_txt = <<<EOT ($SS) EOT; echo $html_txt; ------------------------------ これを一時的な変数を使わずに以下のようなコードで実行したいです。 -(2)-------------------------- $html_txt = <<<EOT ($_SERVER['PHP_SELF']) EOT; echo $html_txt; ------------------------------ これを実行すると # Parse error: syntax error, unexpected '"', # expecting T_STRING or T_VARIABLE or T_NUM_STRING in … というエラーが出てしまいます。 最悪、(1)でもいいと思っています。しかし(2)のようなケースでもできてもいいのではないかと思うのですが、エスケープを入れたり「$_SERVER["PHP_SELF"]」などとクォーテーションを変更したりしてもうまく行きません。 質問は以下です ・(2)のような記述はPHPでは不可能なのでしょうか? ・もし可能なら(1)の何が悪いのか、どうすればうまく行くのかを教えてください よろしくお願いします。

    • ベストアンサー
    • PHP
  • 配列変数

    初歩的な質問で申し訳ありませんが、 下記のような3つの配列変数があります。  $a $b $c [0]01 あ メールアドレス1 [1]01 い メールアドレス1 [2]01 う メールアドレス1 [3]02 ア メールアドレス2 [4]03 阿 メールアドレス3 [5]03 伊 メールアドレス3 [6]03 宇 メールアドレス3 [7]03 江 メールアドレス3 $aは会員コード、$bは文字列、$cは会員のメールアドレス という内容で、それぞれ[0]~[7]まで8つの要素を持って いて、事前に会員コードでソートされた状態で格納され ています。 このような条件で$bの文字列を会員コード毎に結合して対 象メールアドレスにメール送信したいのですが、どのよう な方法がありますでしょうか? よろしくお願い致します。

    • ベストアンサー
    • Perl
  • 配列の値を可変変数を用いて取得する方法について

    配列の値を可変変数を用いて取得する方法について 下記のようなソースがあるのですが、$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
  • char型とstring型について

    char型とstring型について質問があります。 言語はC++です。 以下の関数があったとします。 void test(string a, string b string c){ 処理 } この関数を下記のように利用した場合について質問があります。 a.引数に直接文字列を挿入したケース test("aaa","bbb","ccc") b.変数に文字列を設定し、変数を引数にしたケース string a="aaa" string b="bbb" string c="ccc" test(a,b,c) (1)はコンパイルエラーになり、(2)は成功しました。 同じ様に見えるのですが、何が違うのでしょうか? また、関数の引数の型をchar*にした場合、(1)(2)のケースでコンパイルが通りました。char*型だと何が違うのでしょうか?

  • 連想配列について

    $kana["a"] = "あ"; $kana["i"] = "い"; $kana["u"] = "う"; $kana["e"] = "え"; $kana["o"] = "お"; このような連想配列を定義します。 それで$nameという変数にa~oのいずれかの値が入るとして、 echo $kana["$name"] ということはできないのでしょうか? echo $kana["a"] はちゃんと表示されたのでPHPやapacheの設定が間違ってるとは思えないのですが・・。

    • ベストアンサー
    • PHP
  • 可変変数出力方法

    以下のプログラムで ========================== <html> <title>variable_variable</title> <body> <?   $number=1;   $var_1="one"; $var_2="two"; if($number==1) { $output="var_1"; } else if($number==2) { $output="var_2"; } print"$$output";//可変変数A print($$output);//可変変数B ?> </body> </html> ==========================   print"$$output";//可変変数A print($$output);//可変変数B 可変変数Aは$var_1 可変変数Bはone と出力されます。 どちらも内容は同じモノなのですが。 普段出力方法は print""; という方法を使用しているのですが、 可変変数には print(); という方法を取らないとダメなのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • echo printのパラメータに変数を埋め込む時の問題について

     初歩的な質問ですがPHPでecho print 命令を実行する問題について お聞きします。 $a=10; $b=20; $c=$a+$b; echo "答えは、$cです。"; //(1) echo "答えは、$c です。"; //(2) echo "答えは、".$c."です。"; //(3) を実行すると  (1)は、答えは、まで表示してそれ以降が表示しません。  (2)は、$cに後ろに半角スペースを入れた場合で   「答えは、30 です。」と表示しますが、半角スペースが   入ってしまいます。  (3)は、特に問題なく「答えは、30です。」と表示します。  (1)のように書いた場合、うまく表示されない原因がわかりません。 よろしくお願いいたします。 テスト環境は、 OS:WindowsXP PHP5 Apache2.2 php.iniの文字コードは、UTF-8に設定しています。 ソースコードは、UTF-8で保存しています。

    • ベストアンサー
    • PHP
  • 文字列を特定文字で分割したい

    はじめまして。宜しくお願いします。 現在Access2002のVBAをつかってタイトルのようなことを実現したいと思っています。 Dim a As String Dim b As String という二つの変数を用意して 「C:\Documents and Settings\デスクトップ\test.csv」という文字列が与えられているとき 変数aには「test.csv」を、変数bには「C:\Documents and Settings\デスクトップ\」を 格納しようとしています。 スマートなやり方がわからず、 文字列の右から一文字ずつ比較して行き、何文字目に「¥」が出てくるかをカウントして、right関数とleft関数で分割を行っています。 このような処理を行う場合、なにか適した関数があると思い探しているのですが、 なかなか見つからず、行き詰っています。(そのような関数があるのかも分からず・・) もしもなにかお気づきの方が居られましたら、ご教授宜しくお願いします。

  • 変数を取り出しているのに、なぜdefine関数は使

    変数を取り出しているのに、なぜdefine関数は使わないの? 変数に値を格納して取り出すときは、define関数を使うと覚えたのですが 牡蠣コードでも変数に値を入れて取り出せます。 <?php $number = 12345; echo $number; ?> define関数はどういう時に使うのでしょうか?文字列の場合のみですか?

    • ベストアンサー
    • PHP