PHP 中的序列化函式
-
在 PHP 中演示對一維陣列使用
serialize()
和unserialize()
-
在 PHP 中演示對多維陣列使用
Serialize()
和Unserialize()
-
PHP 中
Serialize()
和json_encode()
的區別
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()
可以執行得更快但餘量非常低。
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook