淘先锋技术网

首页 1 2 3 4 5 6 7

聊到php中的数组序列化操作,不得不提到PHP的序列化和反序列化函数,其中包括serialize() 和unserialize()。

Serialize() 函数是将变量序列化后获取字符串,也就是把数组层层存储的数据结构转化为可存储或可传输的字符串。反之,unserialize() 函数是将通过serialize()函数生成的字符串,还原为原本的数据结构。这种特殊的字符串,我们称之为serialize字符串。

想要进一步理解,可以看看以下的例子:

$array = array('name' =>'sam', 'age' =>25, 'city' =>'Beijing');
$serStr = serialize($array);
echo $serStr;
// output: a:3:{s:4:"name";s:3:"sam";s:3:"age";i:25;s:4:"city";s:7:"Beijing";}

在代码中,首先定义了一个关联数组:$array,数组中有三个元素:name,age和city,接着使用serialize()函数把数组转化为字符串,并将其打印出来。可以看到,输出了一个非常奇怪、杂乱无章的字符串,而这就是该数组被序列化之后的结果。

那么unserialize()函数“反序列化”,对于从serialize()函数返回的字符串反推回来最初的数据结构的操作过程如下所示:

$serStr = 'a:3:{s:4:"name";s:3:"sam";s:3:"age";i:25;s:4:"city";s:7:"Beijing";}';
$array = unserialize($serStr);
print_r($array);
// output: Array ( [name] =>sam [age] =>25 [city] =>Beijing )

unserialize方法接受一个 Serialize()方法输出的字符串输入。理论上unserialize()函数总是成功的,或者在不符合文本格式的情况下,触发一个E_NOTICE级别的错误。unserialize 函数不能创建实现的匿名类。使用 unserialize()可以安全地重新构造之前存储的对象。

我们还可以使用数组加序列的方式传递参数,下面是一个实际的代码示例:

$arr = array('first_name' =>'san',
'last_name' =>'tony',
'phone' =>array('123','456'),
'hobby' =>'music'
); 
echo serialize($arr); 
// a:4:{s:10:"first_name";s:3:"san";s:9:"last_name";s:4:"tony";s:5:"phone";a:2:{i:0;s:3:"123";i:1;s:3:"456";}s:5:"hobby";s:5:"music";}

在这个代码段中,我们定义了一个关联数组 $arr,数组中包含三个键值对。 注意数组中第三行的键 phone 其实是包含了两个值的数组,这个数组通过 serialize() 函数序列化后,可以看到输出的字符串中,有 a:2 表示数组中包含两个元素。

序列化是一个非常有用的特性,常用于缓存存储,网络传输等操作。然而,在一些场景下需要注意数组中的值的种类,可序列化数据类型包括: boolean,integer,float,string,array,object 和 NULL。传递给 unserialize 函数的字符串,应该不允许来自未受信任的源,以避免被植入恶意的处理程序。这个函数的使用最好规避掉来自未知和不可信的源。

以上是PHP中序列化操作的相关介绍,希望能对你有所帮助!