$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