当前位置: 首页 > 面试题库 >

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

唐彬炳
2023-03-14
问题内容

我的问题很基本。

我没有找到任何例子来满足我的需求,究竟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对象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>

在许多情况下,您需要将 复杂的数据结构 作为字符串传递。序列化将任意数据结构表示为字符串,解决了该问题。



 类似资料:
  • 似乎有支持类-在包中。然而,我一直无法找到文档、示例、测试用例,以便在一组图表中使用这种排列/布局。 指针赞赏。

  • 问题内容: 我正在使用,但它会返回如下所示的意外结果: 为什么我得到这些结果? 问题答案: 您是否要使用学位?请记住,并且期望弧度。

  • 问题内容: 大家好, 我想调用 一次而不创建一个反复调用的 循环 ,我应该为此使用递归方法还是应该使用 ? 还请告诉我使用?谢谢 :) 问题答案: 设置一个 定期 计时器。它返回一个句柄,您可以将其传递来阻止它触发: 在浏览器上,保证句柄是一个不等于; 的数字。因此,为“未设置计时器”设置一个方便的标志值。(其他平台可能返回其他值;例如,NodeJS的计时器函数返回一个对象。) 要将功能安排为 仅

  • 在成功运行JUnit4测试后,我试图将JUnit5与Gradle一起使用。 而我唯一的测试包含 我觉得这很奇怪! 我的生成文件是 我的文件夹结构是,使用包, 在我使用的IntelliJ2017.1.3中,模块结构如下所示 因为Gradle现在想要源代码和测试在他们自己的包中。 使用gradle在intellij中从JUnit4升级到JUnit5 链接回到上面的问题,并链接到这个Jetbrains博

  • 然后,为了在中调度作业,我使用了: 此外,为了实际执行,我让它像这样工作: 如上所述,所有这些过去在使用XML-配置时都能正常工作。 现在,使用java-config时,在失败 对于java-configuration,我设置,如下所示: 如何使用java-config在中插入对的引用?

  • 我在一个集群中使用Kerberos部署了NiFi,为了访问UI,我使用了HAProxy。我可以通过单独的节点URL访问NiFi UI,但它不能与loadbalncer URL一起工作,并得到以下错误 请求包含无效的主机标头 我认为可以通过nifi.web.proxy.host和nifi.web.proxy.context.path参数来修复。我尝试了这两个参数,但问题仍然存在。