- ベストアンサー
PHPで参照渡しから配列変数名を取得する方法
- PHPで参照渡しから配列変数名を取得する方法について説明します。
- 質問者は現在PHPを勉強中で、配列変数名を個別に出力したいとのことです。
- 質問のコード例では、character関数内で変数名を取得する方法についての解決策が提案されています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
参照渡しは変数名が渡されるわけではないので、そのままでは無理です。 構造的に最も良いのは変数名を渡すことです。 function character($target, $arrayName){ echo($arrayName . "_name"); } character($animals, 'animals'); あまり良くはないですが、こういった書き方も一応は出来ます。 function character($target) { $arrayName = $target."_name"; echo ($arrayName); global $$target; echo "<ul>"; foreach($$target as $v) echo "<li>$v</li>"; echo "</ul>"; } character('animals');
その他の回答 (1)
- duron
- ベストアンサー率77% (73/94)
以前、デバッグ用に「変数名=値」を出力できる関数が 作れないか調べてたことがあります。 その時海外のフォーラムで見つけたものなのですが バックトレースを利用して力技で実現したものがありました。 <?php function character($target) { $trace = debug_backtrace(); // バックトレースレースを生成 $vLine = file($trace[0]["file"]); // 呼び出し元ファイルの内容を配列に取得 $fLine = $vLine[$trace[0]['line'] - 1]; // 呼び出し元の行の内容を取得 preg_match('/\$(\w+)/', $fLine, $match); // 変数名を正規表現で取得 echo ($match[0]."_name"); } $animals[] = 'いぬ'; $animals[] = 'さる'; $animals[] = 'きじ'; character($animals); echo ("<br />"); $fish[] = 'まぐろ'; $fish[] = 'ひらめ'; $fish[] = 'かつお'; $fish[] = 'あじ'; character($fish); ?> 正攻法ではないですが、発想の転換で実現できるというところに ものすごく感心してしまいました。 このような発想ができる人間に自分もなりたいです。
お礼
なるほど~、このようなやり方もあるのですね。 バックトレースを利用してこのように出来るのは知らなかったです。 ありがとうございました。
お礼
回答いただきありがとうございます<(_ _)> 参照渡しは配列の変数名も渡しているわけではないのですね、、、。 下の書き方だと出来るみたいですが、確かにちょっと強引になってしまうようですね。 上記のように引数を追加して変数名を入れたほうが良さそうなのでそちらのほうで 作ってみたいと思います。 ありがとうございました。