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:

 PHP |  copiar código |? 
01
TableEditor Object
02
(
03
    [db] => Resource id #82
04
    [pk] => id_idioma_afiliado
05
    [table] => idioma_afiliado
06
    [fields] => Array
07
        (
08
            [id_idioma_afiliado] => Array
09
                (
10
                    [display] => id_idioma_afiliado
11
                    [input] => text
12
                    [values] =>
13
                    [default] =>
14
                )
15
 
16
            [afiliado_id] => Array
17
                (
18
                    [display] => afiliado_id
19
                    [input] => text
20
                    [values] =>
21
                    [default] =>
22
                )
23
 
24
            [idioma_id] => Array
25
                (
26
                    [display] => idioma_id
27
                    [input] => text
28
                    [values] =>
29
                    [default] =>
30
                )
31
 
32
            [tx_descricao_afiliado] => Array
33
                (
34
                    [display] => tx_descricao_afiliado
35
                    [input] => textarea
36
                    [values] =>
37
                    [default] =>
38
                )
39
 
40
            [tx_transfer] => Array
41
                (
42
                    [display] => tx_transfer
43
                    [input] => textarea
44
                    [values] =>
45
                    [default] =>
46
                )
47
 
48
            [tx_informacao_afiliado] => Array
49
                (
50
                    [display] => tx_informacao_afiliado
51
                    [input] => textarea
52
                    [values] =>
53
                    [default] =>
54
                )
55
 
56
            [tx_apresentacao_afiliado] => Array
57
                (
58
                    [display] => tx_apresentacao_afiliado
59
                    [input] => textarea
60
                    [values] =>
61
                    [default] =>
62
                )
63
 
64
        )
65
)

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:

 PHP |  copiar código |? 
01
Array
02
(
03
    [db] => Resource id #82
04
    [pk] => id_idioma_afiliado
05
    [table] => idioma_afiliado
06
    [fields] => Array
07
        (
08
            [id_idioma_afiliado] => Array
09
                (
10
                    [display] => id_idioma_afiliado
11
                    [input] => text
12
                    [values] =>
13
                    [default] =>
14
                )
15
 
16
            [afiliado_id] => Array
17
                (
18
                    [display] => afiliado_id
19
                    [input] => text
20
                    [values] =>
21
                    [default] =>
22
                )
23
 
24
            [idioma_id] => Array
25
                (
26
                    [display] => idioma_id
27
                    [input] => text
28
                    [values] =>
29
                    [default] =>
30
                )
31
 
32
            [tx_descricao_afiliado] => Array
33
                (
34
                    [display] => tx_descricao_afiliado
35
                    [input] => textarea
36
                    [values] =>
37
                    [default] =>
38
                )
39
 
40
            [tx_transfer] => Array
41
                (
42
                    [display] => tx_transfer
43
                    [input] => textarea
44
                    [values] =>
45
                    [default] =>
46
                )
47
 
48
            [tx_informacao_afiliado] => Array
49
                (
50
                    [display] => tx_informacao_afiliado
51
                    [input] => textarea
52
                    [values] =>
53
                    [default] =>
54
                )
55
 
56
            [tx_apresentacao_afiliado] => Array
57
                (
58
                    [display] => tx_apresentacao_afiliado
59
                    [input] => textarea
60
                    [values] =>
61
                    [default] =>
62
                )
63
 
64
        )
65
)

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:

 PHP |  copiar código |? 
01
function objectToArray ($object) {
02
	if ( count($object) > 1 ) {
03
		$arr = array();
04
		for ( $i = 0; $i < count($object); $i++ ) {
05
			$arr[] = get_object_vars($object[$i]);
06
		}
07
 
08
    	        return $arr;
09
 
10
	} else {
11
		return get_object_vars($object);
12
	}
13
}

Para utilizar, é simples:

 PHP |  copiar código |? 
1
// $object é o seu objeto
2
echo "<pre>";
3
print_r(objectToArray($object));
4
echo "</pre>";

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! :)

PHP

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.

Deixe seu Comentário

(obrigatório)

(obrigatório)