首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用php serialize()和unserialize()

如何使用php serialize()和unserialize()
EN

Stack Overflow用户
提问于 2011-12-27 14:42:18
回答 9查看 277.9K关注 0票数 132

我的问题很基本。

我没有找到任何示例来满足我的需求,比如serialize()unserialize()在php中到底是什么意思?他们只是给出了一个例子-序列化一个数组,并以一种无法解释的格式显示输出。通过他们的行话来理解基本概念真的很难。

编辑:

代码语言:javascript
复制
<?php

$a= array( '1' => 'elem 1', '2'=> 'elem 2', '3'=>' elem 3');
print_r($a);
echo ("<br></br>");
$b=serialize($a);
print_r($b);

?>

输出:

代码语言:javascript
复制
Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 ) 

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

我不能理解第二个输出。除此之外,有没有人能举个例子说明我在使用php数组之前需要序列化它的情况?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-12-27 14:54:38

PHP数组、对象或其他复杂数据结构不能在运行的PHP脚本之外传输、存储或以其他方式使用。如果您希望将如此复杂的数据结构持久化到脚本的单次运行之外,则需要对其进行序列化。这只是意味着将结构放在一个“较低的公分母”中,可以由PHP以外的其他东西来处理,如数据库、文本文件、套接字。标准的PHP函数PHP就是一种表达这种情况的格式,它将数据结构序列化为serialize所特有的字符串表示形式,并且可以使用unserialize将其转换为PHP对象。不过,还有许多其他格式,如JSON或XML。

以下面这个常见问题为例:

如何将pass数组传递给Javascript?

PHP和Javascript只能通过字符串进行通信。您可以很容易地将字符串"foo"传递给Javascript。您可以很容易地将数字1传递给Javascript。您可以轻松地将布尔值truefalse传递给Javascript。但是如何将这个数组传递给Javascript呢?

代码语言:javascript
复制
Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 ) 

答案是序列化。对于PHP/Javascript,JSON实际上是更好的序列化格式:

代码语言:javascript
复制
{ 1 : 'elem 1', 2 : 'elem 2', 3 : 'elem 3' }

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

不过,这与相同数据结构的表示形式一样有效:

代码语言:javascript
复制
a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}

但几乎只有PHP使用它,其他地方对这种格式的支持很少。

这是非常常见的,也得到了很好的支持:

代码语言:javascript
复制
<array>
    <element key='1'>elem 1</element>
    <element key='2'>elem 2</element>
    <element key='3'>elem 3</element>
</array>

在许多情况下,您需要将复杂的数据结构作为字符串进行传递。序列化将任意数据结构表示为字符串,解决了如何做到这一点。

票数 177
EN

Stack Overflow用户

发布于 2015-04-09 00:00:32

PHP序列化()取消序列化()用法

代码语言:javascript
复制
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);

它会给出类似下面这样的输出

代码语言:javascript
复制
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()函数

代码语言:javascript
复制
$original_array=unserialize($serialized_array);
var_export($original_array);

我希望这能有所帮助。

票数 30
EN

Stack Overflow用户

发布于 2011-12-27 14:46:58

当你想让你的php值可存储时,你必须把它变成一个字符串值,这就是serialize()所做的。而unserialize()做了相反的事情。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8641889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档