如何使用php序列化()和取消序列化()?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我的问题是非常基本的。我没有找到任何例子来满足我的需求,究竟serialize()unserialize()在PHP是什么意思?他们只是举一个例子 - 序列化一个数组,并以不明原因的格式显示输出。通过他们的行话来理解这个基本概念是非常困难的。

提问于
用户回答回答于

一个PHP数组或对象或其他复杂的数据结构不能被运输或存储,或以其他方式在正在运行的PHP脚本之外使用。如果您想在脚本的一次运行之外坚持如此复杂的数据结构,则需要序列化它。这只是意味着将结构放入可由PHP以外的其他事物处理的“较低公分母”,如数据库,文本文件,套接字等。标准的PHP函数serialize只是一种表达这种事物的格式,它将一个数据结构串行化为一个PHP特有的字符串表示形式,并且可以使用它反转为一个PHP对象unserialize。还有许多其他格式,如JSON或XML。

以这个常见问题为例:

如何将PHP 数组传递给Javascript?

PHP和Javascript只能通过字符串进行通信。你可以"foo"很容易地将字符串传递给Javascript。你可以1很容易地将数字传递给Javascript。你也可以传递布尔值true,并false容易为JavaScript。但是,你如何将这个数组传递给Javascript?

Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 ) 

答案是序列化。在PHP / Javascript的情况下,JSON实际上是更好的序列化格式:

{ 1 : 'elem 1', 2 : 'elem 2', 3 : 'elem 3' }

Javascript可以很容易地将其转换为实际的Javascript数组。

尽管如此,这同样适用于相同数据结构的表示:

a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}

但几乎只有PHP使用它,在其他地方几乎不支持这种格式。 这是非常普遍的,并得到很好的支持:

<array>
    <element key='1'>elem 1</element>
    <element key='2'>elem 2</element>
    <element key='3'>elem 3</element>
</array>

在许多情况下,你需要以字符串的形式传递复杂的数据结构。序列化,将任意数据结构表示为字符串,解决了如何执行此操作。

用户回答回答于

PHP的serialize()反序列化()用法

echo '<pre>';
// say you have an array something like this 
$multidimentional_array= array(
    array(
        array("rose", 1.25, 15),
        array("daisy", 0.75, 25),
        array("orchid", 4, 7) 
       ),
    array(
        array("rose", 1.25, 15),
        array("daisy", 0.75, 25),
        array("orchid", 5, 7) 
       ),
    array(
        array("rose", 1.25, 15),
        array("daisy", 0.75, 25),
        array("orchid", 8, 7) 
    )
);

// serialize 
$serialized_array=serialize($multidimentional_array);
print_r($serialized_array);

这给你一个这样的输出

a:3:{i:0;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:4;i:2;i:7;}}i:1;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:5;i:2;i:7;}}i:2;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:8;i:2;i:7;}}}

再次如果你想获得原始数组,只需使用PHP的unserialize()函数

$original_array=unserialize($serialized_array);
var_export($original_array);

我希望这个能帮上忙

扫码关注云+社区