Algumas vezes nos deparamos com algumas responses de API ou mesmo algum cenário, onde temos um array com vários objetos . E isso pode causar alguns problemas - como por exemplo - utilizar uma biblioteca que requer um array multidimensional como parâmetro ou converter para json. Em um cenário onde temos um array de objetos, cujos atributos são todos públicos, a solução seria:
$converted = array();
array_walk_recursive($this->array, function(&$item, $key) use (&$converted) {
if (is_object($item)){
$converted = get_object_vars($item);
}
});
Caminhamos recursivamente pelo array aplicando funções aos membros do array identificados como objeto, após essa etapa atribuimos um novo array a uma variavel onde serão armazenados os objetos convertidos. Utilizando a função get_object_vars() conseguimos acessar todas as propriedades públicas de um determinado objeto. Porém caso o objeto tenha propriedades privadas não termos acesso a elas, para isso, utilizaremos Reflection.
$converted = array();
$count = 0;
array_walk_recursive($this->array, function(&$item, $key) use (&$converted, &$count) {
if (is_object($item)){
$reflect = new ReflectionClass($item);
foreach ($reflect->getProperties() as $propertie) {
$propertie->setAccessible(true);
$converted[$count][$propertie->getName()] = $propertie->getValue($item);
}
$count++;
}
});
Esse cenário é um pouco diferente além do novo array atribuimos também uma variavel do tipo inteiro para representar os indices do nosso array indexado. Construimos nossa ReflectionClass passando no construtor o objeto que queremos acessar as propriedades. Então, iteramos as propriedades do objeto e configuramos cada propriedade para acessivel convertendo assim cada propriedado do objeto para um membro array.
Veja um exemplo completo: https://gist.github.com/esilvajr/26beaf1422922df320a4e108047862aa#file-convertarrayofobjectsample-php
Que seja útil no futuro...
Referencias:
- array_walk_recursive() (http://php.net/manual/pt_BR/function.array-walk-recursive.php).
- get_object_vars() (http://php.net/manual/pt_BR/function.get-object-vars.php).
- ReflectionClass() (https://secure.php.net/manual/pt_BR/class.reflectionclass.php).
Thank you for sharing this class @esilvajr, came in really handy.