@@ 167-195 (lines=29) @@ | ||
164 | * |
|
165 | * @return array |
|
166 | */ |
|
167 | function jetpack_json_wrap( &$any, $seen_nodes = array() ) { |
|
168 | if ( is_object( $any ) ) { |
|
169 | $input = get_object_vars( $any ); |
|
170 | $input['__o'] = 1; |
|
171 | } else { |
|
172 | $input = &$any; |
|
173 | } |
|
174 | ||
175 | if ( is_array( $input ) ) { |
|
176 | $seen_nodes[] = &$any; |
|
177 | ||
178 | $return = array(); |
|
179 | ||
180 | foreach ( $input as $k => &$v ) { |
|
181 | if ( ( is_array( $v ) || is_object( $v ) ) ) { |
|
182 | if ( in_array( $v, $seen_nodes, true ) ) { |
|
183 | continue; |
|
184 | } |
|
185 | $return[ $k ] = $this->json_wrap( $v, $seen_nodes ); |
|
186 | } else { |
|
187 | $return[ $k ] = $v; |
|
188 | } |
|
189 | } |
|
190 | ||
191 | return $return; |
|
192 | } |
|
193 | ||
194 | return $any; |
|
195 | } |
|
196 |
@@ 33-61 (lines=29) @@ | ||
30 | return $this->json_unwrap( json_decode( $str, true ) ); |
|
31 | } |
|
32 | ||
33 | private function json_wrap( &$any, $seen_nodes = array() ) { |
|
34 | if ( is_object( $any ) ) { |
|
35 | $input = get_object_vars( $any ); |
|
36 | $input['__o'] = 1; |
|
37 | } else { |
|
38 | $input = &$any; |
|
39 | } |
|
40 | ||
41 | if ( is_array( $input ) ) { |
|
42 | $seen_nodes[] = &$any; |
|
43 | ||
44 | $return = array(); |
|
45 | ||
46 | foreach ( $input as $k => &$v ) { |
|
47 | if ( ( is_array( $v ) || is_object( $v ) ) ) { |
|
48 | if ( in_array( $v, $seen_nodes, true ) ) { |
|
49 | continue; |
|
50 | } |
|
51 | $return[ $k ] = $this->json_wrap( $v, $seen_nodes ); |
|
52 | } else { |
|
53 | $return[ $k ] = $v; |
|
54 | } |
|
55 | } |
|
56 | ||
57 | return $return; |
|
58 | } |
|
59 | ||
60 | return $any; |
|
61 | } |
|
62 | ||
63 | private function json_unwrap( $any ) { |
|
64 | if ( is_array( $any ) ) { |