| @@ 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 ] = jetpack_json_wrap( $v, $seen_nodes ); | |
| 186 | 			} else { | |
| 187 | $return[ $k ] = $v; | |
| 188 | } | |
| 189 | } | |
| 190 | ||
| 191 | return $return; | |
| 192 | } | |
| 193 | ||
| 194 | return $any; | |
| 195 | } | |
| 196 | ||
| @@ 34-62 (lines=29) @@ | ||
| 31 | return $this->json_unwrap( json_decode( $str, true ) ); | |
| 32 | } | |
| 33 | ||
| 34 | 	private function json_wrap( &$any, $seen_nodes = array() ) { | |
| 35 | 		if ( is_object( $any ) ) { | |
| 36 | $input = get_object_vars( $any ); | |
| 37 | $input['__o'] = 1; | |
| 38 | 		} else { | |
| 39 | $input = &$any; | |
| 40 | } | |
| 41 | ||
| 42 | 		if ( is_array( $input ) ) { | |
| 43 | $seen_nodes[] = &$any; | |
| 44 | ||
| 45 | $return = array(); | |
| 46 | ||
| 47 | 			foreach ( $input as $k => &$v ) { | |
| 48 | 				if ( ( is_array( $v ) || is_object( $v ) ) ) { | |
| 49 | 					if ( in_array( $v, $seen_nodes, true ) ) { | |
| 50 | continue; | |
| 51 | } | |
| 52 | $return[ $k ] = $this->json_wrap( $v, $seen_nodes ); | |
| 53 | 				} else { | |
| 54 | $return[ $k ] = $v; | |
| 55 | } | |
| 56 | } | |
| 57 | ||
| 58 | return $return; | |
| 59 | } | |
| 60 | ||
| 61 | return $any; | |
| 62 | } | |
| 63 | ||
| 64 | 	private function json_unwrap( $any ) { | |
| 65 | 		if ( is_array( $any ) ) { | |