電子書籍の厳選無料作品が豊富!

リストの配列の一部を、別のところから読み込もうとしたら、NULLになってしまい、うまくいきません。どう書けばよいでしょうか?

<現状>
 function xList(){
  $list = array(
   "x1" => array(
        1 => "有",
        2 => "無",
       ),
   "x2" => array(
        0 => "PHP",
        1 => "Ruby",
        5 => "Python",
       ),

となっている、x2の中身を、別から読み込みたいのですが…

     $x_master = array(
        0 => "PHP",
        1 => "Ruby",
        5 => "Python",
     );

 function xList(){
  $list = array(
   "x1" => array(
        1 => "有",
        2 => "無",
  ),
   "x2" => $x_master,

これで、var_dump($list);すると、x2の中がNULLになります…

A 回答 (1件)

PHP variable scope


http://php.net/manual/en/language.variables.scop …
によれば、関数xList()内で参照されている$x_masterはローカル変数であって、グローバル変数ではないため、

以下のコードは何も出力しない。
http://ideone.com/rBXAm
一方以下のコードは出力する。
http://ideone.com/5fvXv

だからこうすると、質問者の言うとおり、NULLになる。
http://ideone.com/18MnT
一方でこうすると、ちゃんと値が入る。
http://ideone.com/66IpM

ただ、個人的にあまりグローバル変数って使いたくなくて、出来るだけ、ローカル変数で出来るように出来ないかをいつも考える。
http://ideone.com/hWCjH
ではなく、
http://ideone.com/pf6DB
って感じでね。
    • good
    • 0
この回答へのお礼

詳しいコード&丁寧な解説をいただき、ありがとうございました!

てっきり、リストだから、何かそれ用の書き方とかルールがあるのかな?
と思って質問してみたのですが、
全然そうではなくて、スコープ範囲の問題だということが分かりました。

また、なるべくグローバル変数ではなくて、
引数を渡して、ローカル変数で、というアドバイスも
よく理解できました。

勉強になりましたー。

お礼日時:2010/12/19 14:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!