前提・実現したいこと
PHPです。
配列$ary
から、キー'errors'
の階層を数えたいです。
以下から3
を得られれば正解です。
php
1$ary = [ 2 'errors' => [ 3 'errors' => [ 4 'errors' => [ 5 'root' => 777 6 ], 7 'others' => 'c' 8 ], 9 'others' => 'b' 10 ], 11 'others' => 'a' 12];
発生している問題
return
の1行前は正しい値なのに、return
の戻り値がNULL
となってしまいます。
該当のソースコード
単純にisset($ary['errors'])
がtrue
の限り、再帰を続ける。という条件で出来るだろうと考えたのですが、これがかなり不思議でNULL
を得てしまいます。
php
1function depth_errors( $ary, $depth = 0 ) { 2 if ( isset($ary['errors']) ) { 3 depth_errors( $ary['errors'], $depth + 1 ); 4 } else { 5 return $depth; 6 } 7} 8 9var_dump( depth_errors($ary) );
試したこと
次のように3行目でvar_dump
をかけてみると正しい値が得られているのに!
さらに6行目のreturn
の1行前でも正しいのに!
なぜか最後のreturn
の戻り値がNULL
となってしまいます。
php
1function depth_errors( $ary, $depth = 0 ){ 2 if( isset($ary['errors']) ){ 3 var_dump($depth + 1); // 正しい値が得られている! 4 depth_errors( $ary['errors'], $depth + 1 ); 5 }else{ 6 var_dump($depth);// ここでも正しい値が得られている! 7 return $depth; 8 } 9} 10 11var_dump( depth_errors($ary) );
続いて以下$tmp
を使い、return
のタイミングを変えてみたりもしたのですが、結果かわらず。でした。
php
1function depth_errors( $ary, $depth = 0 ){ 2 $tmp = false; 3 if( isset($ary['errors']) ){ 4 depth_errors( $ary['errors'], $depth + 1 ); 5 }else{ 6 $tmp = true; 7 } 8 if( $tmp ) return $depth; 9} 10 11var_dump( depth_errors($ary) );
回答1件
あなたの回答
tips
プレビュー