Как из массива stdClass объектов сделать массив массивов
Есть массив
$source = [
"error": null,
"result": {
"total": 500,
"pages": [
{
"page": "foobar.com",
"data":
[
{
"date": "2020-06-05",
"count": 358
},
{
"date": "2020-06-11",
"count": 501
}
]
},
{
"page": "npmjs.com",
"data":
[
{
"date": "2020-06-05",
"count": 453
},
{
"date": "2020-06-11",
"count": 491
}
]
},
},
"post_action": null,
];
Из него нужно получить такой же массив, только все stdClass объекты должны стать массивами.
Функция, которую я написал работает только с одним уровнем объектов(если в них нет других объектов)
foreach($source['result']['pages'] as $el) {
foreach($el as $key => $value) {
if($key == 'data') {
$this->arrayOfObjectsToArrayOfArrays($value);
}
}
}
public function arrayOfObjectsToArrayOfArrays(array &$arr) {
$tmp = [];
$objects = $arr;
foreach ($objects as $key => $obj) {
if(is_object($obj)) {
$tmp[$key] = (array)$obj;
}else{
$tmp[$key] = is_null($obj) ? 'null' : $obj;
}
}
$arr = $tmp;
}
Ответы (1 шт):
Автор решения: Kirill Babinec
→ Ссылка
function convert($source) {
return json_decode(json_encode($source), true);
}