aprender PHP logo

Nenhum produto encontrado nessa seleção.

Se você trabalha em qualquer área do desenvolvimento há muito tempo, provavelmente já deve ter se deparado com tipos de dados estranhos, como a {php}string{/php} apresentada abaixo:

a:3:{s:6:"chave1";b:1;i:0;i:1234;i:1;a:2:{i:0;i:1;i:1;i:2;}}

Isso se chama serialização, ou seja, transformar qualquer tipo de dado em uma string para ter a possibilidade de salvar tais dados na base de dados.

Neste artigo, você vai entender como criar dados serializados e fazer a desserialização (retornar o tipo de dados original) posteriormente.

Serialização de dados PHP

Para serializar qualquer tipo de dado em PHP, simplesmente utilize a função {php}serialize{/php} (ver manual). Por exemplo:

<?php
// Array original
$array_original = array(
	'chave1' => true,
	1234,
	array(1,2),
);

// Serializando o array
// a:3:{s:6:"chave1";b:1;i:0;i:1234;i:1;a:2:{i:0;i:1;i:1;i:2;}} 
$array_serializado = serialize($array_original);
?>

O {php}array{/php} serializado acima deverá retornar o seguinte:

a:3:{s:6:"chave1";b:1;i:0;i:1234;i:1;a:2:{i:0;i:1;i:1;i:2;}}

Embora isso não se pareça inteligível para mais leigos, ao final do artigo vou explicar como ler e entender tais dados.

Se você salvar a {php}string{/php} gerada pela serialização no seu banco de dados, vai conseguir recuperar seus dados originais com apenas uma linha de código. É isso que vamos ver agora.

Desserialização em PHP

Certo, então eu tenho aquele dado estranho na minha base de dados, como faço para recuperar o formato original?

Simples demais, veja:

<?php
// Array serializado
$array_serializado = 'a:3:{s:6:"chave1";b:1;i:0;i:1234;i:1;a:2:{i:0;i:1;i:1;i:2;}}';

// Retornando o array original
$array_original = unserialize( $array_serializado );

print_r( $array_original );

/**

Retorno: 
Array
(
    [chave1] => 1
    [0] => 1234
    [1] => Array
        (
            [0] => 1
            [1] => 2
        )

)
*/
?>

Na verdade é só utilizar a função {php}unserialize{/php} (ver manual).

Nos meus exemplos acima, utilizei apenas arrays como cobaias, porém, isso funciona com quase todos os tipos de dados, como objetos, arrays, booleans, e assim por diante.

Como funciona a serialização em PHP

A serialização sabe exatamente qual o tipo de dado você está serializando pelo simples fato de deixar tudo anotado na própria string.

Veja nosso exemplo anterior:

a:3:{s:6:"chave1";b:1;i:0;i:1234;i:1;a:2:{i:0;i:1;i:1;i:2;}}

Vamos organizar e indentar esses valores para você entender melhor.

a:3: {
	s:6: "chave1";
	b:1; 
	i:0;
	i:1234;
	i:1;
	a:2: {
		i:0;i:1;i:1;i:2;
	}
}

Sempre temos uma letra e um número que indicam o tipo de dado e seu tamanho, em seguida seu valor. Por exemplo:

  • a:3: Array com 3 chaves/valores
  • s:6; String com 6 casas
  • b:1; Boolean verdadeiro (0 para falso)
  • i:0; Inteiro 0
  • i:1234; Inteiro 1234
  • a:2: Array com 2 chaves/valores

E temos mais alguns tipos, exemplo:

  • N; Null
  • O:N:"stdClass":N: Objeto

Não que você vá precisar ler dados serializados, já que o PHP faz isso graciosamente por você com a função {php}unserialize{/php}, porém, é sempre importante entender como as coisas funcionam.