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.