公式サイト

デモ


	$data['neko'][1]['mike'] = 'sallcat';
	$data[0] = 1;
	$data['animal'][1] = 'bigcat';
	$data['animal'][2]['konchu'][2] = 'kuro-ari';
	$data['fish']='fish';
	
	$depth = arrayDepth($data);
	echo "depth={$depth}<br>";
	
	$depth2 = arrayDepthSmp($data);
	echo "depth2={$depth2}<br>";
	
	
	/**
	 * 配列の階層の深さを調べる
	 * 
	 * @note
	 * 配列すべてをサーチするので処理は重め
	 * 
	 * @param array $ary 対象配列
	 * @param number $depth 深度(再起呼び出しで使用するので省略すること)
	 * @return number 階層数
	 */
	function arrayDepth(&$ary, $depth=0){
		if(is_array($ary)){
			$depth++;
			
			$max_depth = 0;
			foreach($ary as $value){
				$dep = arrayDepth($value, $depth);
				if($dep > $max_depth) $max_depth = $dep;
			}
			return $max_depth;
			
		}else{
			return $depth;
		}
	}
	
	/**
	 * 配列の階層の深さを調べる(高速版)
	 *
	 * @note
	 * 配列の先頭からのみ深度を調べる。
	 * 処理は速いが、階層にばらつきのある配列には向かない。
	 * 行列データなどに。
	 *
	 * @param array $ary 対象配列
	 * @param number $depth 深度(再起呼び出しで使用するので省略すること)
	 * @return number 階層数
	 */
	function arrayDepthSmp(&$ary, $depth=0){
		if(is_array($ary)){
			$depth++;
			$first_key = key($ary);
			$depth = arrayDepthSmp($ary[$first_key], $depth);
		}
		return $depth;
	}

出力

depth=4
depth2=3