我的问题很基础。
关于 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 值 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 - 如何使用 php serialize() 和 unserialize(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8641889/