質問編集履歴

4

誤字を訂正しました

2021/12/09 17:41

投稿

nikuatsu
nikuatsu

スコア177

test CHANGED
File without changes
test CHANGED
@@ -122,7 +122,7 @@
122
122
 
123
123
  }
124
124
 
125
- if( $tmp ) return '$depth';
125
+ if( $tmp ) return $depth;
126
126
 
127
127
  }
128
128
 

3

試したことに追記しました

2021/12/09 17:41

投稿

nikuatsu
nikuatsu

スコア177

test CHANGED
File without changes
test CHANGED
@@ -103,3 +103,31 @@
103
103
  var_dump( depth_errors($ary) );
104
104
 
105
105
  ```
106
+
107
+ 続いて以下`$tmp`を使い、`return`のタイミングを変えてみたりもしたのですが、結果かわらず。でした。
108
+
109
+ ```php
110
+
111
+ function depth_errors( $ary, $depth = 0 ){
112
+
113
+ $tmp = false;
114
+
115
+ if( isset($ary['errors']) ){
116
+
117
+ depth_errors( $ary['errors'], $depth + 1 );
118
+
119
+ }else{
120
+
121
+ $tmp = true;
122
+
123
+ }
124
+
125
+ if( $tmp ) return '$depth';
126
+
127
+ }
128
+
129
+
130
+
131
+ var_dump( depth_errors($ary) );
132
+
133
+ ```

2

誤字を訂正しました

2021/12/09 17:37

投稿

nikuatsu
nikuatsu

スコア177

test CHANGED
File without changes
test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  ### 該当のソースコード
46
46
 
47
- 単純に`isset($errors['errors'])`が`true`の限り、再帰を続ける。という条件で出来るだろうと考えたのですが、これがかなり不思議で`NULL`を得てしまいます。
47
+ 単純に`isset($ary['errors'])`が`true`の限り、再帰を続ける。という条件で出来るだろうと考えたのですが、これがかなり不思議で`NULL`を得てしまいます。
48
48
 
49
49
  ```php
50
50
 

1

質問を絞りました

2021/12/09 17:32

投稿

nikuatsu
nikuatsu

スコア177

test CHANGED
File without changes
test CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
  PHPです。
4
4
 
5
- 配列`$errors`から、キー`'errors'`の階層を数えたいです。
5
+ 配列`$ary`から、キー`'errors'`の階層を数えたいです。
6
6
 
7
7
  以下から`3`を得られれば正解です。
8
8
 
9
9
  ```php
10
10
 
11
- $errors = [
11
+ $ary = [
12
12
 
13
13
  'errors' => [
14
14
 
@@ -36,63 +36,23 @@
36
36
 
37
37
 
38
38
 
39
+ ### 発生している問題
39
40
 
40
-
41
- ### 発生している問題・エラーメッセージ
42
-
43
- 該当のソースコードにおいて、`'errors'`に限らず、`'others'`の階層まで得てしまいます。
41
+ `return`の1行前は正しい値なのに、`return`の戻り値が`NULL`となってしまいます。
44
42
 
45
43
 
46
44
 
47
45
  ### 該当のソースコード
48
46
 
49
- こちらネット見つけコードですが、これですと`'others'`5階層`5`を得てしまうのが問題です。
47
+ 単純に`isset($errors['errors'])`が`true`の限り、再帰を続ける。という条件出来るだろうと考えですが、これがり不思議で`NULL`を得てしまいます。
50
48
 
51
49
  ```php
52
50
 
53
- function array_depth($arr, $blank=false, $depth=0){
51
+ function depth_errors( $ary, $depth = 0 ) {
54
52
 
55
- if( !is_array($arr)){
53
+ if ( isset($ary['errors']) ) {
56
54
 
57
- return $depth;
58
-
59
- } else {
60
-
61
- $depth++;
62
-
63
- $tmp = ($blank) ? array($depth) : array(0);
64
-
65
- foreach($arr as $value){
66
-
67
- $tmp[] = array_depth($value, $blank, $depth);
68
-
69
- }
70
-
71
- return max($tmp);
72
-
73
- }
74
-
75
- }
76
-
77
-
78
-
79
- var_dump(array_depth($errors));
80
-
81
- ```
82
-
83
-
84
-
85
- ### 試したこと
86
-
87
- もっと単純に`isset($errors['errors'])`が`true`の限り、再帰を続ける。という条件に変更してみたのですが、これがかなり不思議で`NULL`を得てしまいます。
88
-
89
- ```php
90
-
91
- function depth_errors( $errors, $depth = 0 ) {
92
-
93
- if ( isset($errors['errors']) ) {
94
-
95
- depth_errors( $errors['errors'], $depth + 1 );
55
+ depth_errors( $ary['errors'], $depth + 1 );
96
56
 
97
57
  } else {
98
58
 
@@ -104,23 +64,33 @@
104
64
 
105
65
 
106
66
 
107
- var_dump( depth_errors($errors) );
67
+ var_dump( depth_errors($ary) );
108
68
 
109
69
  ```
110
70
 
71
+
72
+
73
+ ### 試したこと
74
+
111
- 次のように3行目で`var_dump`をかけてみると正しい値が得られているのに…なぜか最後の`return`では`NULL`となってしまうようです。
75
+ 次のように行目で`var_dump`をかけてみると正しい値が得られているのに
76
+
77
+ さらに6行目の`return`の1行前でも正しいのに!
78
+
79
+ なぜか最後の`return`の戻り値が`NULL`となってしまいます。
112
80
 
113
81
  ```php
114
82
 
115
- function depth_errors( $errors, $depth = 0 ){
83
+ function depth_errors( $ary, $depth = 0 ){
116
84
 
117
- if( isset($errors['errors']) ){
85
+ if( isset($ary['errors']) ){
118
86
 
119
- var_dump($depth + 1); // ここを見ると正しい値が得られているのに…
87
+ var_dump($depth + 1); // 正しい値が得られている
120
88
 
121
- depth_errors( $errors['errors'], $depth + 1 );
89
+ depth_errors( $ary['errors'], $depth + 1 );
122
90
 
123
91
  }else{
92
+
93
+ var_dump($depth);// ここでも正しい値が得られている!
124
94
 
125
95
  return $depth;
126
96
 
@@ -130,6 +100,6 @@
130
100
 
131
101
 
132
102
 
133
- var_dump( depth_errors($errors) );
103
+ var_dump( depth_errors($ary) );
134
104
 
135
105
  ```