序列化数据
通常,我们需要在数据库或PHP文件中存储复杂数组。我们中的一些人肯定会寻找一些内置的功能来完成这项任务。复杂数组是具有多个数据类型或数组元素的数组。
但是,我们已经有了一个方便的解决方案来处理这种情况。我们不必编写自己的函数来将复杂数组转换为格式化字符串。有两种常用的序列化变量的方法。
- serialize()
- unserialize()
我们可以使用serialize()函数序列化PHP中的任何数据。serialize()函数接受一个参数,这是我们想要对数据进行seralize,并返回一个序列化的字符串。下面的程序说明了这一点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php // a complex array $myvar = array( 'hello', 42, array(1, 'two'), 'apple' ); // convert to a string $string = serialize($myvar); // printing the serialized data echo $string; ?> |
输出
1 2 | a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i: 0;i:1;i:1;s:3:"two";}i:3;s:5:"apple";} |
在上面的代码中,我们有一个具有序列化数据的变量$string。我们可以使用unserialize()函数反序列化变量的值,以返回复杂数组$myvar的原始值。
下面的程序演示了serialize()和unserialize()函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php // a complex array $myvar = array( 'hello', 42, array(1, 'two'), 'apple' ); // serialize the above data $string = serialize($myvar); // unserializing the data in $string $newvar = unserialize($string); // printing the unserialized data print_r($newvar); ?> |
输出
1 2 3 4 5 6 7 8 9 10 11 12 | Array ( [0] => hello [1] => 42 [2] => Array ( [0] => 1 [1] => two ) [3] => apple ) |
这是本机PHP序列化方法。然而,由于JSON近年来非常流行,他们决定在PHP 5.2中添加对它的支持。现在,您可以分别使用json_encode()和json_decode()函数来序列化和反序列化PHP中的数据。
由于JSON格式仅是文本格式,因此它可以很容易地发送到服务器和从服务器发出,并且可以被任何编程语言用作数据格式。
让我们看看如何在PHP中使用json_encode():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php // a complex array $myvar = array( 'hello', 42, array(1, 'two'), 'apple' ); // serializing data $string = json_encode($myvar); // printing the serialized data echo $string; ?> |
输出
1 | ["hello",42,[1,"two"],"apple"] |
我们可以使用json_decode()函数对上述程序中编码的数据进行解码,得到orignal复杂数组。下面的程序说明了这一点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php // a complex array $myvar = array( 'hello', 42, array(1, 'two'), 'apple' ); // serializing data $string = json_encode($myvar); // decoding the above encoded string $newvar = json_decode($string); // printing the decoded data print_r($newvar); ?> |
输出
1 2 3 4 5 6 7 8 9 10 11 12 | Array ( [0] => hello [1] => 42 [2] => Array ( [0] => 1 [1] => two ) [3] => apple ) |
注意:JSON编码和解码更紧凑,最好与javascript和许多其他语言兼容。但是,对于复杂对象,可能会丢失一些信息。