php言語初心者です。よろしくお願いします。

下のコードで、n=0のときは分かります。そして、n=1のときは、配列の要素になることも分かります。
ですが、なぜ、n=2以降の時に、a[0]で配列の配列を表示できるのかが分かりません。
どなたかご教授お願いします。

<pre>
<?php
function dims($a, &$n)
{//1
if( is_array($a) )
{//2
$n++;
echo "a=".$a[0]." n=".$n."¥n";
dims($a[0], $n);
//$a[0]がどの深さまであるか調べるということかな?
}//2
return "n=".$n;
}//1

function dim($a)
{
static $n;
$n = 0;
return dims($a, $n);
}

$dat0=1;
$dat1=array(3,2);
$dat2=array(array(3,2));
$dat3=array(array(array(3), array(2) ) );

echo dim($dat0)."¥n";
echo dim($dat1)."¥n";
echo dim($dat2)."¥n";
echo dim($dat3)."¥n";

?>
</pre>

回答の条件
  • 1人5回まで
  • 登録:2009/06/01 09:31:32
  • 終了:2009/06/01 14:32:32

ベストアンサー

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912009/06/01 10:11:35

ポイント60pt

配列の要素に、数値が入ることもありますし、文字列が入ることもありますし、配列が入ることもあります。

print_r という関数がありますので、そちらを使用して配列全体の構造を表示してみると少しはわかりやすいでしょうか。

<?php
function dims($a, &$n)
{
	if( is_array($a) )
	{
		$n++;
		echo "   :n=[".$n."]<br>\n    ";
		print_r( $a );
		echo "<br>\n";
		dims($a[0], $n);
		//$a[0]がどの深さまであるか調べるということかな?
	}
	return "n=".$n;
}

function dim($a)
{
	static $n;
	$n = 0;
	return dims($a, $n);
}

$dat0=1;
$dat1=array(3,2);
$dat2=array(array(3,2));
$dat3=array(array(array(3), array(2) ) );

echo "dim0:".dim($dat0)."<br>\n";
echo "dim1:".dim($dat1)."<br>\n";
echo "dim2:".dim($dat2)."<br>\n";
echo "dim3:".dim($dat3)."<br>\n";
?>

上記の実行結果は次のようになります。

赤い部分が配列の先頭要素 $a[0] です。

dim0:n=0

   :n=[1]

    Array ( [0] => 3 [1] => 2 )

dim1:n=1

   :n=[1]

    Array ( [0] => Array ( [0] => 3 [1] => 2 ) ) )

   :n=[2]

    Array ( [0] => 3 [1] => 2 )

dim2:n=2

   :n=[1]

    Array ( [0] => Array ( [0] => Array ( [0] => 3 ) [1] => Array ( [0] => 2 ) ) )

   :n=[2]

    Array ( [0] => Array ( [0] => 3 ) [1] => Array ( [0] => 2 ) )

   :n=[3]

    Array ( [0] => 3 )

dim3:n=3

id:gbs01

ありがとうございます。たぶん大丈夫だと思います。

2009/06/01 14:13:42
  • id:b-wind
    何が聞きたいのかいまいちよく分からないのだけれど、var_dump を使えば
    PHP が内部的にどうデータを持ってるか調べられますよ。
    http://www.scollabo.com/banban/php/ref/ref_var_dump.html
  • id:gbs01
    コメントありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません