Convertendo objeto em array com PHP
Mais do que nunca têm-se trabalhado com objetos em PHP, algumas vezes de forma certa, outras vezes de forma errada, mas isso não vem ao caso, a questão é que com a explosão dos frameworks MVC e o uso da camada modelo como representante dos dados de uma aplicação, tornou-se muito comum enviar objetos ao invés de arrays para nossa camada de visualização. Até aí nenhum problema, o problema surge quando precisamos trabalhar em cima desses objetos e realizar ordenações, filtrar elementos repetidos, extrair elementos específicos, dentre outras necessidades. Apesar da SPL ter chegado, o PHP ainda não tem um framework como o Collections Framework do Java para realizar esse trabalho, então muitas vezes torna-se árduo e nem um pouco prazeroso fazer certas operações. Entretanto o PHP possui boas funções para manipular arrays e em muitos casos torna-se vantajoso transformar objetos em arrays, pois assim é possível fazer o uso dessas funções.
Pensando nas situações descritas acima e também baseado em necessidades reais do meu dia-a-dia, criei uma função muito simples que converte um objeto em array.
Imagine um objeto com a seguinte estrutura:
TableEditor Object ( [db] => Resource id #82 [pk] => id_idioma_afiliado [table] => idioma_afiliado [fields] => Array ( [id_idioma_afiliado] => Array ( [display] => id_idioma_afiliado [input] => text [values] => [default] => ) [afiliado_id] => Array ( [display] => afiliado_id [input] => text [values] => [default] => ) [idioma_id] => Array ( [display] => idioma_id [input] => text [values] => [default] => ) [tx_descricao_afiliado] => Array ( [display] => tx_descricao_afiliado [input] => textarea [values] => [default] => ) [tx_transfer] => Array ( [display] => tx_transfer [input] => textarea [values] => [default] => ) [tx_informacao_afiliado] => Array ( [display] => tx_informacao_afiliado [input] => textarea [values] => [default] => ) [tx_apresentacao_afiliado] => Array ( [display] => tx_apresentacao_afiliado [input] => textarea [values] => [default] => ) ) )
Se quiséssemos ordená-lo, por exemplo, apesar de não ser difícil, demandaria tempo.
Mas e se ao invés de um objeto, tivéssemos um array? Algo como:
Array ( [db] => Resource id #82 [pk] => id_idioma_afiliado [table] => idioma_afiliado [fields] => Array ( [id_idioma_afiliado] => Array ( [display] => id_idioma_afiliado [input] => text [values] => [default] => ) [afiliado_id] => Array ( [display] => afiliado_id [input] => text [values] => [default] => ) [idioma_id] => Array ( [display] => idioma_id [input] => text [values] => [default] => ) [tx_descricao_afiliado] => Array ( [display] => tx_descricao_afiliado [input] => textarea [values] => [default] => ) [tx_transfer] => Array ( [display] => tx_transfer [input] => textarea [values] => [default] => ) [tx_informacao_afiliado] => Array ( [display] => tx_informacao_afiliado [input] => textarea [values] => [default] => ) [tx_apresentacao_afiliado] => Array ( [display] => tx_apresentacao_afiliado [input] => textarea [values] => [default] => ) ) )
Ficaria muito mais fácil, não?!
Para obter esse resultado, basta jogar a funçãozinha abaixo como um helper no seu projeto ou criar um método estático em sua classe utilitária. Segue:
function objectToArray ($object) {
if ( count($object) > 1 ) {
$arr = array();
for ( $i = 0; $i < count($object); $i++ ) {
$arr[] = get_object_vars($object[$i]);
}return $arr;
} else {
return get_object_vars($object);
}}
Para utilizar, é simples:
// $object é o seu objetoprint_r(objectToArray($object));
A boa notícia é que esta função preserva toda hierarquia dos seus objetos criando dimensões dentro desse array, no caso uma matriz. O exemplo que eu usei foi bem simples, apenas para poder ilustrar o uso da função, mas caso tivéssemos um objeto mais “complexo” toda sua estrutura seria mantida sem problemas.
Uma dica bem simples, mas espero que seja de grande utilidade! :)
Se você gostou desse tópico, por favor considere deixar um comentário ou se inscreva no feed e tenha no futuro todos os tópicos entregues diretamente no seu agregador.








Estava precisando disso.
Obrigado!
Amigo, estava testando sua função e só consegue receber no array os atributos da sua classe que são public os privates você não consegue recuperar.
Estou fazendo uma aqui que pega os métodos get de uma classe encapsulada como as minhas, se eu conseguir eu posto o resultado aqui
hehe o private é privado, logo eles realmente não devem, nem tem como ser pegos… ao menos que você adicione a inteligência para usar os métodos get.
Você também pode utilizar:
$array = json_decode( json_encode($objeto), true )
Devido ao parâmetro true, ele retornará como array.
Excelente código!!! Encontrei no manual mas sua explicação estava melhor. Vlww