Solución:
Una matriz u objeto PHP u otro estructura de datos compleja no se puede transportar, almacenar o utilizar de otro modo fuera de un ejecutando script PHP. Si quieres persistir una estructura de datos tan compleja más allá de una sola ejecución de un script, necesita publicar por fascículos eso. Eso solo significa poner la estructura en un “denominador común inferior” que puede ser manejado por otras cosas además de PHP, como bases de datos, archivos de texto, sockets. La función estándar de PHP serialize
es solo un formato para expresar tal cosa, serializa una estructura de datos en una representación de cadena que es exclusiva de PHP y se puede invertir en un objeto PHP usando unserialize
. Sin embargo, existen muchos otros formatos, como JSON o XML.
Tomemos, por ejemplo, este problema común:
¿Cómo paso un PHP? formación a Javascript?
PHP y Javascript solo pueden comunicarse a través de cadenas. Puedes pasar la cuerda "foo"
muy fácilmente a Javascript. Puedes pasar el numero 1
muy fácilmente a Javascript. Puedes pasar los valores booleanos true
y false
fácilmente a Javascript. Pero, ¿cómo se pasa esta matriz a Javascript?
Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 )
La respuesta es publicación por entregas. En el caso de PHP / Javascript, JSON es en realidad el mejor formato de serialización:
{ 1 : 'elem 1', 2 : 'elem 2', 3 : 'elem 3' }
Javascript puede revertir fácilmente esto en una matriz de Javascript real.
Sin embargo, esta es una representación igualmente válida de la misma estructura de datos:
a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}
Pero prácticamente solo PHP lo usa, hay poco soporte para este formato en cualquier otro lugar.
Sin embargo, esto es muy común y también está bien soportado:
<array>
<element key='1'>elem 1</element>
<element key='2'>elem 2</element>
<element key='3'>elem 3</element>
</array>
Hay muchas situaciones en las que necesitas pasar estructuras de datos complejas alrededor como cuerdas. La serialización, que representa estructuras de datos arbitrarias como cadenas, resuelve cómo hacer esto.
PHP serialize () unserialize () uso
http://freeonlinetools24.com/serialize
echo '<pre>';
// say you have an array something like this
$multidimentional_array= array(
array(
array("rose", 1.25, 15),
array("daisy", 0.75, 25),
array("orchid", 4, 7)
),
array(
array("rose", 1.25, 15),
array("daisy", 0.75, 25),
array("orchid", 5, 7)
),
array(
array("rose", 1.25, 15),
array("daisy", 0.75, 25),
array("orchid", 8, 7)
)
);
// serialize
$serialized_array=serialize($multidimentional_array);
print_r($serialized_array);
Lo que te da una salida como esta
a:3:{i:0;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:4;i:2;i:7;}}i:1;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:5;i:2;i:7;}}i:2;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:8;i:2;i:7;}}}
de nuevo, si desea recuperar la matriz original, simplemente use la función PHP unserialize ()
$original_array=unserialize($serialized_array);
var_export($original_array);
Espero que esto sea de ayuda
Cuando desee que su valor php sea almacenable, debe convertirlo en un valor de cadena, eso es lo que hace serialize (). Y unserialize () hace lo contrario.