如何使用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。 您可以轻松地将布尔值true
和false
传递给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脚本之外。
- 在数据库中使用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 =数组值的大小
你可以使用序列化来在数据库中存储数据的数组
并可以检索和联合序列化数据使用。