[PHP-users 10338] Re: 関数内での2次元配列の返り値を取得するには?

FUJIMOTO Yoshihiko php-users@php.gr.jp
Wed, 25 Sep 2002 15:23:40 +0900


藤本@質問者です。

近藤さん。皆さんスミマセン..。

大ボケかましてしまいました..。

> PHP のバージョンの問題なのでしょうか??。

いえ、ちがいます。

関数内で初期化したハズの

>    global $iCountX,$iCountY;

に値がキチンと渡っていませんでした。

そのため、計算のループが廻らずに期待した配列変数が空っぽのままでした。

// そりゃそうだわなぁ..

実はこの計算は、さらに別な関数内で行っていた計算でして、実際は、

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
function motomoto(){

...
   $iCountX=4*10;
   $iCountY=3.2*10;
...

   function sample(){
      global $iCountX,$iCountY;
      for($ix2=0 ; $ix2 <= $iCountX ; $ix2++){
         for($iy2=0 ; $iy2 < $iCountY ; $iy2++){
            $HOGE1[$ix2][$iy2]=$ix2*1000+$iy2;
            $HOGE2[$ix2][$iy2]=$ix2+$iy2;
         }
      }
      return array($HOGE1,$HOGE2);
   }

   list($hoge1,$hoge2)=sample();

   echo("<hr>\n");
   for($iy2=0 ; $iy2 <= $iCountY ; $iy2++){
      for($ix2=0 ; $ix2 < $iCountX ; $ix2++){
         echo("hoge1[".$iy2."][".$ix2."]=".$hoge1[$iy2][$ix2]."<br>\n");
         echo("hoge2[".$iy2."][".$ix2."]=".$hoge2[$iy2][$ix2]."<br>\n");
      }
   }
   echo("<hr>\n");

...
}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

のスタイルで

   $iCountX, $iCountY

を計算した後、配列を生成する関数を呼び出していました。

「$iCount*が渡っていないのでは?」と疑いを持って、これを

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   function sample($iCountX,$iCountY){
//      global $iCountX,$iCountY;
...
   list($hoge1,$hoge2)=sample($iCountX,$iCountY);
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

の形式に直して実行しましたところ、期待した結果を得ることができました。

どうにも、脳ミソが短絡している様子でスミマセンでした。

原因がわかりましたので、実装で対策を考えます。

お騒がせいたしました。
m(_"_)m