@@ -12,75 +12,95 @@ public function __construct($ignore=[]) {
12
12
}
13
13
14
14
public function add ($ array ) {
15
- $ this -> summary = self ::summarize ($ array , $ this ->summary );
15
+ self ::summarize (( array ) $ array , $ this ->summary );
16
16
}
17
17
18
18
public function getSummary () {
19
19
return $ this ->summary ;
20
20
}
21
21
22
22
private function summarize ($ array , &$ summary , $ ignore =[]) {
23
+ // Count path..
23
24
if (!isset ($ summary ['count ' ])) {
24
25
$ summary ['count ' ] = 1 ;
25
26
} else {
26
27
$ summary ['count ' ] += 1 ;
27
28
}
29
+
30
+ // Add key-value pairs to summary.
28
31
foreach ($ array as $ key => $ value ) {
29
- if (in_array ($ key , $ ignore )) {
32
+ if (in_array ($ key , $ this ->ignore )) {
33
+ // Key is on ignore list.
30
34
continue ;
31
35
}
36
+
32
37
if (is_numeric ($ key ) && is_string ($ value )) {
38
+ // Item of an array.
33
39
if (!isset ($ summary ['values ' ])) {
34
40
$ summary ['values ' ] = [];
35
41
}
36
- if (!isset ($ summary ['values ' ][$ value ])) {
37
- $ summary ['values ' ][$ value ] = 1 ;
42
+ $ values = &$ summary ['values ' ];
43
+ if (!isset ($ values [$ value ])) {
44
+ $ values [$ value ] = 1 ;
38
45
} else {
39
- $ summary [ ' values ' ] [$ value ] += 1 ;
46
+ $ values [$ value ] += 1 ;
40
47
}
41
48
} else if (is_array ($ value )) {
42
- if (!isset ($ summary ['children ' ][ $ key ] )) {
43
- $ summary ['children ' ][ $ key ] = [];
49
+ if (!isset ($ summary ['children ' ])) {
50
+ $ summary ['children ' ] = [];
44
51
}
45
- $ this ->summarize ($ value , $ summary ['children ' ][$ key ]);
52
+ $ children =& $ summary ['children ' ];
53
+ if (!isset ($ children [$ key ])) {
54
+ $ children [$ key ] = [];
55
+ }
56
+ $ this ->summarize ((array )$ value , $ children [$ key ]);
46
57
} else {
47
58
if (!isset ($ summary ['keys ' ])) {
48
59
$ summary ['keys ' ] = [];
49
60
}
50
- if (!isset ($ summary ['keys ' ][$ key ])) {
51
- $ summary ['keys ' ][$ key ] = [
61
+ $ keys = &$ summary ['keys ' ];
62
+ if (!isset ($ keys [$ key ])) {
63
+ $ keys [$ key ] = [
52
64
'count ' => 1
53
65
];
54
66
} else {
55
- $ summary [ ' keys ' ] [$ key ]['count ' ] += 1 ;
67
+ $ keys [$ key ]['count ' ] += 1 ;
56
68
}
57
- if (is_numeric ($ value )) {
58
- // Min/max erfassen.
59
- if (!isset ($ summary ['keys ' ][$ key ]['distribution ' ])) {
60
- $ summary ['keys ' ][$ key ]['distribution ' ] = [
69
+
70
+ $ current_key = &$ keys [$ key ];
71
+
72
+
73
+ if (is_numeric ($ value ) && !is_string ($ value )) {
74
+ // Numeric values => summarize distribution.
75
+
76
+ if (!isset ($ current_key ['distribution ' ])) {
77
+ $ current_key ['distribution ' ] = [
61
78
'count ' => 1 ,
62
79
'sum ' => $ value ,
63
80
'min ' => $ value ,
64
81
'max ' => $ value
65
82
];
66
83
} else {
67
- $ summary ['keys ' ][$ key ]['distribution ' ]['count ' ] += 1 ;
68
- $ summary ['keys ' ][$ key ]['distribution ' ]['sum ' ] += $ value ;
69
- $ summary ['keys ' ][$ key ]['distribution ' ]['min ' ] = min ($ value , $ summary ['keys ' ][$ key ]['distribution ' ]['min ' ]);
70
- $ summary ['keys ' ][$ key ]['distribution ' ]['max ' ] = max ($ value , $ summary ['keys ' ][$ key ]['distribution ' ]['max ' ]);
84
+ $ distribution = &$ current_key ['distribution ' ];
85
+ $ distribution ['count ' ] += 1 ;
86
+ $ distribution ['sum ' ] += $ value ;
87
+ $ distribution ['min ' ] = min ($ value , $ distribution ['min ' ]);
88
+ $ distribution ['max ' ] = max ($ value , $ distribution ['max ' ]);
71
89
}
72
90
} else if (is_string ($ value )) {
73
- if (!isset ($ summary ['keys ' ][$ key ]['values ' ])) {
74
- $ summary ['keys ' ][$ key ]['values ' ] = [];
91
+ // Non-numeric string values => count values.
92
+ if (!isset ($ current_key ['values ' ])) {
93
+ $ current_key ['values ' ] = [];
75
94
}
76
- if (!isset ($ summary ['keys ' ][$ key ]['values ' ][$ value ])) {
77
- $ summary ['keys ' ][$ key ]['values ' ][$ value ] = 1 ;
95
+ $ values = &$ current_key ['values ' ];
96
+
97
+ if (!isset ($ values [$ value ])) {
98
+ $ values [$ value ] = 1 ;
78
99
} else {
79
- $ summary [ ' keys ' ][ $ key ][ ' values ' ] [$ value ] += 1 ;
100
+ $ values [$ value ] += 1 ;
80
101
}
81
102
}
82
103
}
83
104
}
84
- return $ summary ;
85
105
}
86
106
}
0 commit comments