Преобразование многомерных объектов в массив

Я использую амазонку рекламы продукта api. Значения возвращаются как многомерные объекты.

Это выглядит так:

object(AmazonProduct_Result)#222 (5) { ["_code":protected]=> int(200) ["_data":protected]=> string(16538) array(2) { ["IsValid"]=> string(4) "True" ["Items"]=> array(1) { [0]=> object(AmazonProduct_Item)#19 (1) { ["_values":protected]=> array(11) { ["ASIN"]=> string(10) "B005HNF01O" ["ParentASIN"]=> string(10) "B008RKEIZ8" ["DetailPageURL"]=> string(120) "http://rads.stackoverflow.com/amzn/click/B005HNF01O" ["ItemLinks"]=> array(7) { [0]=> object(AmazonProduct_ItemLink)#18 (1) { ["_values":protected]=> array(2) { ["Description"]=> string(17) "Technical Details" ["URL"]=> string(217) "http://rads.stackoverflow.com/amzn/click/B005HNF01O" } } [1]=> object(AmazonProduct_ItemLink)#17 (1) { ["_values":protected]=> array(2) { 

Я имею в виду, что он также имеет массив внутри объектов. Я хотел бы преобразовать их все в многомерный массив.

Solutions Collecting From Web of "Преобразование многомерных объектов в массив"

Вы можете использовать рекурсивную функцию, как показано ниже:

 function objToArray($obj, &$arr){ if(!is_object($obj) && !is_array($obj)){ $arr = $obj; return $arr; } foreach ($obj as $key => $value) { if (!empty($value)) { $arr[$key] = array(); objToArray($value, $arr[$key]); } else { $arr[$key] = $value; } } return $arr; } 

Я знаю, что это старый, но вы можете попробовать следующий фрагмент кода:

$ array = json_decode (json_encode ($ object), true);

где $ object – это ответ API.

 function convertObjectToArray($data) { if (is_object($data)) { $data = get_object_vars($data); } if (is_array($data)) { return array_map(__FUNCTION__, $data); } return $data; } 

Кредит Кевину Оп ден Камп.

На всякий случай, когда вы пришли сюда, как я, и не нашли правильного ответа на вашу ситуацию, эта модифицированная версия одного из предыдущих ответов – это то, что в итоге работает для меня:

 protected function objToArray($obj) { // Not an object or array if (!is_object($obj) && !is_array($obj)) { return $obj; } // Parse array foreach ($obj as $key => $value) { $arr[$key] = $this->objToArray($value); } // Return parsed array return $arr; } 

Исходным значением является строка JSON. Вызов метода выглядит следующим образом:

 $array = $this->objToArray(json_decode($json, true));