Mi problema es muy básico.
¿No encontré ningún ejemplo para satisfacer mis necesidades en cuanto a qué significa exactamente serialize()
y unserialize()
en PHP? Solo dan un ejemplo: serializan una matriz y muestran una salida en un formato inexplicable. Es realmente difícil entender el concepto básico que pasa por su jerga.
EDITAR:
<?php
$a= array( '1' => 'elem 1', '2'=> 'elem 2', '3'=>' elem 3');
print_r($a);
echo ("<br></br>");
$b=serialize($a);
print_r($b);
?>
salida:
Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 )
a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}
No puedo entender la segunda salida. Además de eso, ¿alguien puede dar un ejemplo de una situación en la que necesito serializar una matriz php antes de usarla?
Respuestas:
Una matriz u objeto PHP u otra estructura de datos compleja no se puede transportar, almacenar ni utilizar fuera de un script PHP en ejecución . Si desea persistir una estructura de datos tan compleja más allá de una sola ejecución de un script, debe serializarla . Eso solo significa poner la estructura en un "mínimo común denominador" que puede ser manejado por otras cosas que no sean PHP, como bases de datos, archivos de texto, sockets. La función PHP estándar
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 revertir en un objeto PHP usandounserialize
. Sin embargo, hay muchos otros formatos, como JSON o XML.Tome por ejemplo este problema común:
¿Cómo paso una matriz PHP a Javascript?
PHP y Javascript solo pueden comunicarse a través de cadenas. Puede pasar la cadena
"foo"
muy fácilmente a Javascript. Puede pasar el número1
muy fácilmente a Javascript. Puede pasar los valores booleanostrue
yfalse
fácilmente a Javascript. Pero, ¿cómo se pasa esta matriz a Javascript?La respuesta es la serialización . En el caso de PHP / Javascript, JSON es en realidad el mejor formato de serialización:
Javascript puede revertir esto fácilmente en una matriz de Javascript real.
Sin embargo, esta es una representación igual de válida de la misma estructura de datos:
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 está bien respaldado:
Hay muchas situaciones en las que necesita pasar estructuras de datos complejas como cadenas. La serialización, que representa estructuras de datos arbitrarias como cadenas, resuelve cómo hacer esto.
fuente
i:1
= entero 1,s:6:"elem 1"
= cadena con 6 caracteres "elem 1" ... ¿Y qué ejemplo está pidiendo, pensé que le di uno?echo json_encode($array);
Cómo lo pasas exactamente depende de las circunstancias. No te obsesiones con eso.PHP serialize () unserialize () uso
http://freeonlinetools24.com/serialize
Lo que te da una salida algo como esto
de nuevo si desea recuperar la matriz original, simplemente use la función PHP unserialize ()
Espero que esto sea de ayuda
fuente
Cuando desea que su valor php sea almacenable, debe convertirlo en un valor de cadena, eso es lo que hace serialize () . Y unserialize () hace lo contrario.
fuente
serialize()
yunserialize()
se hacen para.Ejecute este programa su eco la salida
aquí
a = tamaño de la matriz
i = conteo del número de matriz
s = tamaño de los valores de la matriz
puede usar serializar para almacenar una matriz de datos en la base de datos
y puede recuperar y serializar datos UN para usar.
fuente
La mayoría de los medios de almacenamiento pueden almacenar tipos de cadenas . No pueden almacenar directamente una estructura de datos PHP, como una matriz u objeto, y no deberían, ya que eso acoplaría el medio de almacenamiento de datos con PHP.
En cambio, le
serialize()
permite almacenar una de estas estructuras como una cadena. Se puede deserializar de su representación de cadena conunserialize()
.Si está familiarizado con
json_encode()
yjson_decode()
(y JSON en general), el concepto es similar.fuente
serialize()
es anterior a JSON.¡Por favor! ¡Por favor! ¡Por favor! NO serialice datos ni los coloque en su base de datos. Serialize se puede usar de esa manera, pero eso no tiene en cuenta una base de datos relacional y los tipos de datos inherentes a su motor de base de datos. Hacer esto hace que los datos en su base de datos no sean portátiles, difíciles de leer y puede complicar las consultas. Si desea que su aplicación sea portátil a otros idiomas, por ejemplo, supongamos que desea usar Java para alguna parte de su aplicación en la que tenga sentido usar Java, la serialización se convertirá en un problema en las nalgas. Siempre debe poder consultar y modificar datos en la base de datos sin utilizar una herramienta intermedia de terceros para manipular los datos que se insertarán.
hace que sea realmente difícil mantener el código, el código con problemas de portabilidad y los datos que son más difíciles de migrar a otros sistemas RDMS, nuevo esquema, etc. También tiene la desventaja adicional de hacer que sea desordenado buscar en su base de datos en base a uno de los campos que has serializado.
Eso no quiere decir que serialize () sea inútil. No es ... Un buen lugar para usarlo puede ser un archivo de caché que contiene el resultado de una operación intensiva de datos, por ejemplo. Hay toneladas de otros ... Simplemente no abuses de serializar porque el próximo tipo que venga tendrá una pesadilla de mantenimiento o migración.
Un buen ejemplo de serialize () y unserialize () podría ser así:
Deserializar en la página
fuente
De http://php.net/manual/en/function.serialize.php :
Esencialmente, toma una matriz u objeto php y lo convierte en una cadena (que luego puede transmitir o almacenar como mejor le parezca).
Unserialize se utiliza para convertir la cadena de nuevo a un objeto.
fuente
Básicamente, cuando serializa matrices u objetos, simplemente lo convierte a un formato de cadena válido para que pueda almacenarlos fácilmente fuera del script php.
Nota para el objeto, debe usar los métodos mágicos __sleep y __wakeup. __sleep se llama por serialize (). Un método de suspensión devolverá una matriz de valores del objeto que desea persistir.
__wakeup es llamado por unserialize (). Un método de activación debe tomar los valores no serializados e inicializarlos en el objeto.
Para pasar datos entre php y js, usaría json_encode para convertir la matriz php a un formato json válido. O al revés: use JSON.parese () para convertir un dato de salida (cadena) en un objeto json válido. Desea hacer eso para hacer uso del almacenamiento local. (acceso a datos sin conexión)
fuente
Sí, puedo. Supongamos que necesitamos rastrear su sistema significa que en su sistema tiene más de un administrador y un subadmin, todos estos pueden insertar o actualizar o editar cualquier información. Más tarde necesita saber quién realiza este cambio. Para resolver este problema necesita serializar.
Espero que esto ayude.
fuente
fuente