json_encode () VS serialize () com matrizes PHP

// ATUALIZAÇÃO: O primeiro comentário de @michd é o protocolo real. Sua dica tornou tudo isso inútil.


json_encode ($ array) é uma ótima maneira de converter um array ou objeto PHP em uma string para salvá-lo em um banco de dados.

$myArray = array('firstValue', 'secondValue');
$myArrayJsonEncoded
= json_encode($myArray);

// results to
["firstValue","secondValue"]

// which can be converted back via
$myNewArray
= json_decode($myArrayJsonEncoded);

Mas se quisermos salvar Arrays associativos …

$myAssotiativeArray = array(
'firstKey' => 'firstValue',
'secondKey' => 'secondValue'
);
$myAssotiativeArrayJsonEncoded
= json_encode($myAssotiativeArray);

… Isto é o que acontece:

// {"firstKey":"firstValue","secondKey":"secondValue"}

json_decode
($myAssotiativeArrayJsonEncoded)

// object(stdClass)[1]
// public 'firstKey' => string 'firstValue' (length=10)
// public 'secondKey' => string 'secondValue' (length=11)

Como o JavaScript usa objetos para “matrizes associativas”, isso faz sentido. Mas se quisermos apenas serializar nosso array PHP, precisamos usar a função serialize ()!

$myAssotiativeArraySerialized = serialize($myAssotiativeArray);

// a:2:{s:8:"firstKey";s:10:"firstValue";s:9:"secondKey";s:11:"secondValue";}

Claro, você sempre pode usar serialize (). Mas isso resulta em uma seqüência de caracteres menos legível e mais longa para matrizes não associativas.