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

php
2022-08-30 06:59:29

我的问题非常基本。

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

编辑:

<?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数组之前序列化它的情况吗?


答案 1

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


以这个常见问题为例:

如何将 PHP 数组传递给 Javascript?

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

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>

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


答案 2

PHP serialize() unserialize() usage

http://freeonlinetools24.com/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);

我希望这会有所帮助


推荐