• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:参照渡しからの配列変数名取得。)

PHPで参照渡しから配列変数名を取得する方法

このQ&Aのポイント
  • PHPで参照渡しから配列変数名を取得する方法について説明します。
  • 質問者は現在PHPを勉強中で、配列変数名を個別に出力したいとのことです。
  • 質問のコード例では、character関数内で変数名を取得する方法についての解決策が提案されています。

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

  • ベストアンサー
  • shiren2
  • ベストアンサー率47% (139/295)
回答No.1

参照渡しは変数名が渡されるわけではないので、そのままでは無理です。 構造的に最も良いのは変数名を渡すことです。 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');

tendon_m
質問者

お礼

回答いただきありがとうございます<(_ _)> 参照渡しは配列の変数名も渡しているわけではないのですね、、、。 下の書き方だと出来るみたいですが、確かにちょっと強引になってしまうようですね。 上記のように引数を追加して変数名を入れたほうが良さそうなのでそちらのほうで 作ってみたいと思います。 ありがとうございました。

その他の回答 (1)

  • duron
  • ベストアンサー率77% (73/94)
回答No.2

以前、デバッグ用に「変数名=値」を出力できる関数が 作れないか調べてたことがあります。 その時海外のフォーラムで見つけたものなのですが バックトレースを利用して力技で実現したものがありました。 <?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); ?> 正攻法ではないですが、発想の転換で実現できるというところに ものすごく感心してしまいました。 このような発想ができる人間に自分もなりたいです。

tendon_m
質問者

お礼

なるほど~、このようなやり方もあるのですね。 バックトレースを利用してこのように出来るのは知らなかったです。 ありがとうございました。

関連するQ&A