@@ 38-66 (lines=29) @@ | ||
35 | return $this->json_unwrap( json_decode( $str, true ) ); |
|
36 | } |
|
37 | ||
38 | private function json_wrap( &$any, $seen_nodes = array() ) { |
|
39 | if ( is_object( $any ) ) { |
|
40 | $input = get_object_vars( $any ); |
|
41 | $input['__o'] = 1; |
|
42 | } else { |
|
43 | $input = &$any; |
|
44 | } |
|
45 | ||
46 | if ( is_array( $input ) ) { |
|
47 | $seen_nodes[] = &$any; |
|
48 | ||
49 | $return = array(); |
|
50 | ||
51 | foreach ( $input as $k => &$v ) { |
|
52 | if ( ( is_array( $v ) || is_object( $v ) ) ) { |
|
53 | if ( in_array( $v, $seen_nodes, true ) ) { |
|
54 | continue; |
|
55 | } |
|
56 | $return[ $k ] = $this->json_wrap( $v, $seen_nodes ); |
|
57 | } else { |
|
58 | $return[ $k ] = $v; |
|
59 | } |
|
60 | } |
|
61 | ||
62 | return $return; |
|
63 | } |
|
64 | ||
65 | return $any; |
|
66 | } |
|
67 | ||
68 | private function json_unwrap( $any ) { |
|
69 | if ( is_array( $any ) ) { |
@@ 187-215 (lines=29) @@ | ||
184 | * |
|
185 | * @return array |
|
186 | */ |
|
187 | function jetpack_json_wrap( &$any, $seen_nodes = array() ) { |
|
188 | if ( is_object( $any ) ) { |
|
189 | $input = get_object_vars( $any ); |
|
190 | $input['__o'] = 1; |
|
191 | } else { |
|
192 | $input = &$any; |
|
193 | } |
|
194 | ||
195 | if ( is_array( $input ) ) { |
|
196 | $seen_nodes[] = &$any; |
|
197 | ||
198 | $return = array(); |
|
199 | ||
200 | foreach ( $input as $k => &$v ) { |
|
201 | if ( ( is_array( $v ) || is_object( $v ) ) ) { |
|
202 | if ( in_array( $v, $seen_nodes, true ) ) { |
|
203 | continue; |
|
204 | } |
|
205 | $return[ $k ] = jetpack_json_wrap( $v, $seen_nodes ); |
|
206 | } else { |
|
207 | $return[ $k ] = $v; |
|
208 | } |
|
209 | } |
|
210 | ||
211 | return $return; |
|
212 | } |
|
213 | ||
214 | return $any; |
|
215 | } |
|
216 |