如何使用php serialize()和unserialize()

我的问题是非常基本的。

我没有find任何示例来满足我的需要什么serialize()unserialize()在PHP意味着什么? 他们只是举一个例子 – 序列化一个数组,并以不明原因的格式显示输出。 通过术语来理解这个基本概念是非常困难的。

编辑:

 <?php $a= array( '1' => 'elem 1', '2'=> 'elem 2', '3'=>' elem 3'); print_r($a); echo ("<br></br>"); $b=serialize($a); print_r($b); ?> 

输出继电器:

 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";} 

我不明白第二个输出。 除此之外,任何人都可以举一个例子,我需要在使用它之前序列化一个PHP数组?

一个PHP数组或对象或其他复杂的数据结构不能被运输,存储或以其他方式在正在运行的PHP脚本之外使用。 如果您想要在一次脚本运行之后坚持如此复杂的数据结构,则需要对其进行序列化 。 这就意味着将结构放入一个可以由PHP以外的东西处理的“较低公分母”,比如数据库,文本文件,套接字。 标准的PHP函数serialize只是一种expression这种事物的格式 ,它将一个数据结构序列化为一个PHP特有的string表示,并且可以使用反unserialize将其反转成一个PHP对象。 还有很多其他的格式,比如JSON或者XML。


以这个常见问题为例:

如何将一个PHP 数组传递给Javascript?

PHP和Javascript只能通过string进行通信。 你可以很容易地将string"foo"传递给Javascript。 你可以很容易地将数字1传递给Javascript。 您可以轻松地将布尔值truefalse传递给Javascript。 但是,你如何将这个数组传递给Javascript?

 Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 ) 

答案是序列化 。 在PHP / Javascript的情况下,JSON实际上是更好的序列化格式:

 { 1 : 'elem 1', 2 : 'elem 2', 3 : 'elem 3' } 

JavaScript可以很容易地将其反转成一个真正的Javascript数组。

尽pipe如此,这同样是有效的表示相同的数据结构:

 a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";} 

但是几乎只有PHP使用它,其他地方几乎不支持这种格式。
这是非常普遍的,并得到很好的支持,

 <array> <element key='1'>elem 1</element> <element key='2'>elem 2</element> <element key='3'>elem 3</element> </array> 

在许多情况下,您需要以stringforms传递复杂的数据结构 。 序列化,将任意数据结构表示为string,解决了如何做到这一点。

PHP serialize()反序列化()用法

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); 

这给你一个这样的输出

 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;}}} 

再次如果你想获得原始数组,只需使用PHP的unserialize()函数

 $original_array=unserialize($serialized_array); var_export($original_array); 

我希望这会有所帮助

当你想让你的php值存储时,你必须把它变成一个string值,这就是serialize()所做的事情。 和反序列化()做相反的事情。

大多数存储介质可以存储stringtypes。 它们不能直接存储PHP数据结构,如数组或对象,也不应该像数据存储介质与PHP相耦合。

相反, serialize()允许您将这些结构中的一个存储为一个string。 它可以使用unserialize()从其string表示反unserialize()

如果您熟悉json_encode()json_decode() (以及一般的JSON),则这个概念是相似的。

http://php.net/manual/en/function.serialize.php

生成一个值的可存储表示。 这对于存储或传递PHP值很有用,而不会丢失它们的types和结构。

本质上,它需要一个PHP数组或对象,并将其转换为一个string(然后您可以传输或存储,如您所见)。

Unserialize用于将string转换回对象。

我可以。 假设我们需要跟踪您的系统手段在您的系统中有多个pipe理员和子pipe理员,所有这些都可以插入,更新或编辑任何信息。之后您需要知道是谁进行此更改。 为了解决这个问题,你需要序列化。

  **Explain:**Create a table named history which stores all changes. Each time there is a change insert a new row in this table. It might have this fields: history(id,target_table(name of the table), target_id (ID of the saved entry),create/edit/change data (serialized data of the saved row),date) 

我希望这会帮助你。

基本上

当你序列化数组或对象时,简单地把它转换成有效的string格式,这样你就可以很容易地将它们存储在php脚本之外。

  1. 在数据库中使用serilize来保存一个对象的状态(以user类实例为例)接下来将数据加载到对象的前一个状态(方法不是序列化你需要包含对象类才能使用它)
    • 用户个性化

注意对象你应该使用magic __sleep和__wakeup方法。 __sleep由serialize()调用。 睡眠方法将从您想要保留的对象中返回值的数组。

__wakeup被unserialize()调用。 唤醒方法应该采取非序列化的值,并在对象中初始化它们。

为了在php和js之间传递数据,你可以使用json_encode将php数组转换为有效的json格式。 或者其他方式 – 使用JSON.parese()将输出数据(string)转换为有效的json对象。 你会想这样做,以利用本地存储。 (离线数据访问)

 <?php $a= array("1","2","3"); print_r($a); $b=serialize($a); echo $b; $c=unserialize($b); print_r($c); 

运行这个程序它的回声输出

 a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";} 

这里
a =数组的大小
我=arrays号的数量
s =数组值的大小

你可以使用序列化来在数据库中存储数据的数组
并可以检索和联合序列化数据使用。