PHP serialize()
用于将复杂的数据结构转换为特定字符串的格式,以便我们可以在运行的 PHP 脚本之外使用它们。
简单地说,serialize()
用于将数据结构放入 lower common denominator
,以便在文本文件、套接字或数据库中使用它们。
本文演示了 serialize()
和 unserialize()
的使用。
在 PHP 中演示对一维数组使用 serialize()
和 unserialize()
PHP serialize()
只接受一个参数,即你要序列化的值,unserialize()
也是如此。参见示例:
<?php
$demo_array = array("jiyik1", "jiyik2", "jiyik3");
//serialize one dimensional array
$serialized_data = serialize($demo_array);
echo $serialized_data."<br>";
//Userialize the serialized array
$Unserialized_data = unserialize($serialized_data);
print_r($Unserialized_data);
echo "<br><br>";
//serialize an assosiative array
$demo_array= array( 'Val1' => 'jiyik1', 'Val2'=> 'jiyik2', 'Val3'=>'jiyik3');
$serialized_data = serialize($demo_array);
echo $serialized_data."<br>";
//Userialize the serialized array
$Unserialized_data = unserialize($serialized_data);
print_r($Unserialized_data);
?>
PHP serialize()
一个简单数组和一个关联数组,然后通过 unserialize()
反转操作。
输出:
a:3:{i:0;s:6:"jiyik1";i:1;s:6:"jiyik2";i:2;s:6:"jiyik3";}
Array
(
[0] => jiyik1
[1] => jiyik2
[2] => jiyik3
)
a:3:{s:4:"Val1";s:6:"jiyik1";s:4:"Val2";s:6:"jiyik2";s:4:"Val3";s:6:"jiyik3";}
Array
(
[Val1] => jiyik1
[Val2] => jiyik2
[Val3] => jiyik3
)
序列化生成一个字符串,其中包含给定数组的所有数据。序列化字符串,数组的 a=size
,数组编号的 i=count
,数组值的 s=size
。
输出显示,如果数组不是关联的,serialize
仍将根据关联数组生成输出。
在 PHP 中演示对多维数组使用 Serialize()
和 Unserialize()
对于多维数组,输出将是相似的。
<?php
$multidimentional_array= array(
array(
array("jiyik1", 10, 15.5),
array("jiyik2", 15, 25.5)
),
array(
array("jiyik1", 15, 25.5),
array("jiyik2", 20, 30.5)
),
array(
array("jiyik1", 20, 30.5),
array("jiyik2", 30, 35.5)
)
);
//serialize one dimensional array
$serialized_data = serialize($multidimentional_array);
echo $serialized_data."<br><br><br>";
//Userialize the serialized array
$Unserialized_data = unserialize($serialized_data);
print_r($Unserialized_data);
?>
输出:
a:3:{i:0;a:2:{i:0;a:3:{i:0;s:6:"jiyik1";i:1;i:10;i:2;d:15.5;}i:1;a:3:{i:0;s:6:"jiyik2";i:1;i:15;i:2;d:25.5;}}i:1;a:2:{i:0;a:3:{i:0;s:6:"jiyik1";i:1;i:15;i:2;d:25.5;}i:1;a:3:{i:0;s:6:"jiyik2";i:1;i:20;i:2;d:30.5;}}i:2;a:2:{i:0;a:3:{i:0;s:6:"jiyik1";i:1;i:20;i:2;d:30.5;}i:1;a:3:{i:0;s:6:"jiyik2";i:1;i:30;i:2;d:35.5;}}}
Array
(
[0] => Array
(
[0] => Array
(
[0] => jiyik1
[1] => 10
[2] => 15.5
)
[1] => Array
(
[0] => jiyik2
[1] => 15
[2] => 25.5
)
)
[1] => Array
(
[0] => Array
(
[0] => jiyik1
[1] => 15
[2] => 25.5
)
[1] => Array
(
[0] => jiyik2
[1] => 20
[2] => 30.5
)
)
[2] => Array
(
[0] => Array
(
[0] => jiyik1
[1] => 20
[2] => 30.5
)
[1] => Array
(
[0] => jiyik2
[1] => 30
[2] => 35.5
)
)
)
PHP 中 Serialize()
和 json_encode()
的区别
json_encode()
是 PHP 中另一个将数组或对象转换为字符串的内置方法,它使用 JSON 来执行操作,类似地,对于 unserialize()
,json_decode()
可以用过的。
serialize()
和 json_encode()
之间有一些区别。
-
Serialize()
通常比json_encode()
快。 -
JSON
更便携。 -
对于 UTF-8 字符,你不需要在
serialize()
中执行任何操作,但使用json_encode()
你需要添加一个额外参数JSON_UNESCAPED_UNICODE
。否则,JSON 会将 UTF-8 转换为 Unicode 转义序列。 -
serialize()
有对象的原始类的内存,而 JSON 没有;他们将数据存储为 stdClass 的实例。
让我们比较一下 serialize()
和 json_encode()
:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$demo_array= array( 'Val1' => 'jiyik1', 'Val2'=> 'jiyik2', 'Val3'=>'jiyik3');
// `json_encode()` time
$start_time = microtime(true);
json_encode($demo_array);
$json_time = microtime(true) - $start_time;
echo "`json_encode()` encoded the array in $json_time seconds<br>";
// `serialize()` time
$start_time = microtime(true);
serialize($demo_array);
$serialize_time = microtime(true) - $start_time;
echo "`serialize()` serialized the array in $serialize_time seconds<br>";
// Comparing `json_encode()` and `serialize()`
if ($json_time < $serialize_time) {
printf("json_encode() is %01.2f%% faster than serialize() for this array<br>", ($serialize_time / $json_time - 1) * 100);
}
else if ($serialize_time < $json_time ) {
printf("serialize() is %01.2f%% faster than json_encode() for this array<br>", ($json_time / $serialize_time - 1) * 100);
} else {
echo "Cannot Compare!<br>";
}
?>
输出:
`json_encode()` encoded the array in 9.0599060058594E-6 seconds
`serialize()` serialized the array in 5.0067901611328E-6 seconds
serialize() is 80.95% faster than json_encode() for this array
正如我们所见,对于给定的数组,serialize()
比 json_encode
快 88.89%。
通常 serialize()
是较快的一种,但有时 json_encode()
可以运行得更快但余量非常低。