配列の各要素をスキャンして、その値が配列だった場合に、再帰的に再度スキャンします。これを繰り返して最大の深度(次元数)を調べます。
値渡し/参照渡し、どちらが有利かまでは考慮してません。php バージョンによって異なる可能性もあります。必要であれば適宜改造してください。ま、この程度のもので気にすることもないですね。巨大な配列で無い限り問題にはならないと思います。
巨大な配列の場合はアルゴリズム自体も見直す必要があります。
コードを簡易化するために関数のオーバーヘッドが、1回余分に掛かかるような処理が入ってます。など。
コードを簡易化するために関数のオーバーヘッドが、1回余分に掛かかるような処理が入ってます。など。
ソースコード
// 配列の次元数を調べる
function depth($ary, $cnt = 0){
if(!is_array($ary)) return $cnt; else $cnt++;
$max = $cnt; $i = 0;
foreach($ary as $v){
if(is_array($v)){
$i =zb_dim_depth($v, $cnt);
if($max < $i) $max = $i;
}
}
return $max;
}
function depth($ary, $cnt = 0){
if(!is_array($ary)) return $cnt; else $cnt++;
$max = $cnt; $i = 0;
foreach($ary as $v){
if(is_array($v)){
$i =
if($max < $i) $max = $i;
}
}
return $max;
}
使い方
$ret = depth($ary);
・ 2010/01/25 修正
コードに余計な文字が入っていたので打ち消し線で消しました。
$ary(配列)を与えると、$ret に最大の次元数(numeric)が返ってきます。
$ary が配列じゃないと、0 を返します。
最近、こんな感じのものばかりだ・・・。
まとめるのがラクだし、そもそもまとめる必要もないしw



この記事へのコメント