HOWTO · PHP
PHP 中的序列化函式
本教程演示了 PHP 中內建函式 serialize() 的使用。
本頁內容
PHP serialize() 用於將複雜的資料結構轉換為特定字串的格式,以便我們可以在執行的 PHP 指令碼之外使用它們。
簡單地說,serialize() 用於將資料結構放入 lower common denominator,以便在文字檔案、套接字或資料庫中使用它們。
本教程演示了 serialize() 和 unserialize() 的使用。
在 PHP 中演示對一維陣列使用 serialize() 和 unserialize()
PHP serialize() 只接受一個引數,即你要序列化的值,unserialize() 也是如此。參見示例:
<?php
$demo_array = array("delftstack1", "delftstack3", "delftstack3");
//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' => 'delftstack1', 'Val2'=> 'delftstack3', 'Val3'=>'delftstack3');
$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:11:"delftstack1";i:1;s:11:"delftstack3";i:2;s:11:"delftstack3";}
Array ( [0] => delftstack1 [1] => delftstack3 [2] => delftstack3 )
a:3:{s:4:"Val1";s:11:"delftstack1";s:4:"Val2";s:11:"delftstack3";s:4:"Val3";s:11:"delftstack3";}
Array ( [Val1] => delftstack1 [Val2] => delftstack3 [Val3] => delftstack3 )
序列化生成一個字串,其中包含給定陣列的所有資料。序列化字串,陣列的 a=size,陣列編號的 i=count,陣列值的 s=size。
輸出顯示,如果陣列不是關聯的,serialize 仍將根據關聯陣列生成輸出。
在 PHP 中演示對多維陣列使用 Serialize() 和 Unserialize()
對於多維陣列,輸出將是相似的。
<?php
$multidimentional_array= array(
array(
array("delftstack1", 10, 15.5),
array("delftstack2", 15, 25.5)
),
array(
array("delftstack1", 15, 25.5),
array("delftstack2", 20, 30.5)
),
array(
array("delftstack1", 20, 30.5),
array("delftstack2", 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:11:"delftstack1";i:1;i:10;i:2;d:15.5;}i:1;a:3:{i:0;s:11:"delftstack2";i:1;i:15;i:2;d:25.5;}}i:1;a:2:{i:0;a:3:{i:0;s:11:"delftstack1";i:1;i:15;i:2;d:25.5;}i:1;a:3:{i:0;s:11:"delftstack2";i:1;i:20;i:2;d:30.5;}}i:2;a:2:{i:0;a:3:{i:0;s:11:"delftstack1";i:1;i:20;i:2;d:30.5;}i:1;a:3:{i:0;s:11:"delftstack2";i:1;i:30;i:2;d:35.5;}}}
Array ( [0] => Array ( [0] => Array ( [0] => delftstack1 [1] => 10 [2] => 15.5 ) [1] => Array ( [0] => delftstack2 [1] => 15 [2] => 25.5 ) ) [1] => Array ( [0] => Array ( [0] => delftstack1 [1] => 15 [2] => 25.5 ) [1] => Array ( [0] => delftstack2 [1] => 20 [2] => 30.5 ) ) [2] => Array ( [0] => Array ( [0] => delftstack1 [1] => 20 [2] => 30.5 ) [1] => Array ( [0] => delftstack2 [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' => 'delftstack1', 'Val2'=> 'delftstack3', 'Val3'=>'delftstack3');
// `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 4.0531158447266E-6 seconds
`serialize()` serialized the array in 2.1457672119141E-6 seconds
serialize() is 88.89% faster than json_encode() for this array
正如我們所見,對於給定的陣列,serialize() 比 json_encode 快 88.89%。
通常 serialize() 是較快的一種,但有時 json_encode() 可以執行得更快但餘量非常低。