PHP 中的 serialize
和 unserialize
string serialize ( mixed $value )
serialize()
返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。 这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。
serialize
返回的值结构为 type:length:value
,若为integer
、float
,则直接返回 type:value
例:
1//eg.1.string
2 $tmp = "hello world";
3 echo serialize($tmp);
4 /*
5 返回 "类型":"长度":"值":
6 s:11:"hello world";
7 */
8
9//eg.2.integer
10 $integer = 19881223 ;
11 echo serialize($integer);
12 /*
13 返回 "类型":"值":
14 i:19881223;
15 */
16
17//eg.3.double
18 $double = 1988.1223 ;
19 echo serialize($double);
20 /*
21 返回 "类型":"值":
22 d:1988.1222999999999956344254314899444580078125;
23 */
24
25//eg.4.array
26 $arr = Array
27 (
28 "name" => "MrAsong",
29 "mail" => "i at mrasong dot com",
30 "homepage" => "http://mrasong.com"
31 );
32 echo serialize($arr);
33 /*
34 返回 "类型":"值":
35 a:3:{s:4:"name";s:7:"MrAsong";s:4:"mail";s:20:"i at mrasong dot com";s:8:"homepage";s:18:"http://mrasong.com";}
36 */
unserialize()
对单一的已序列化的变量进行操作,将其转换回 PHP 的值。
返回的是转换之后的值,可为 integer
、float
、string
、array
或 object
。如果传递的字符串不可解序列化,则返回 FALSE
。
例:
1//eg.1.string
2 $string = 's:11:"hello world";';
3 $value = unserialize($string);
4 echo gettype($value)."\n";
5 print_r($value);
6 /*
7 返回: string
8 "hello world"
9 */
10
11//eg.2.integer
12 $integer = 'i:19881223;';
13 $value = unserialize($integer);
14 echo gettype($value)."\n";
15 print_r($value);
16 /*
17 返回:integer
18 19881223
19 */
20
21//eg.3.double
22 $double = 'd:1988.1222999999999956344254314899444580078125;' ;
23 $value = unserialize($double);
24 echo gettype($value)."\n";
25 print_r($value);
26 /*
27 返回:double
28 1988.1223
29
30 */
31
32//eg.4.array
33 $arr = 'a:3:{s:4:"name";s:7:"MrAsong";s:4:"mail";s:20:"i at mrasong dot com";s:8:"homepage";s:18:"http://mrasong.com";}' ;
34 $value = unserialize($arr);
35 echo gettype($value)."\n";
36 print_r($value);
37 /*
38 返回:
39 array
40 Array
41 (
42 [name] => MrAsong
43 [mail] => i at mrasong dot com
44 [homepage] => http://mrasong.com
45 )
46 */