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

标签 php

我的问题很基础。

关于 serialize()unserialize() 在 php 中的确切含义,我没有找到任何示例来满足我的需求?他们只是举了一个例子——序列化一个数组并以无法解释的格式显示输出。通过他们的行话很难理解基本概念。

编辑:

<?php

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

?>

输出:

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数组吗?

最佳答案

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


以这个常见问题为例:

如何将 PHP 数组 传递给 Javascript?

PHP 和 Javascript 只能通过字符串进行通信。您可以非常轻松地将字符串 "foo" 传递给 Javascript。您可以非常轻松地将数字 1 传递给 Javascript。您可以轻松地将 bool 值 truefalse 传递给 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 - 如何使用 php serialize() 和 unserialize(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8641889/

相关文章:

php - 在 Laravel 5 中设置 Bootstrap 导航栏事件类

php - wp 作业管理器自定义过滤器

php - 使用 XML 和 XPath 的 Symfony DomCrawler

php - 从数组中的每个值中删除破折号,然后重建数组

php - sql连接问题

php - 用逗号分隔的字符串内爆数组,但在最后一个字符串后没有逗号

syntax-error - 如果if语句出现括号解析错误

php - 具有空数据集的 foreach

javascript - 如果需要,ajaxForm 重新提交

php - 如果我在 Laravel 5 项目中使用 andersao/l5-repository 会破坏控制反转原则吗?