不懂serialize()

时间:2010-01-14 05:49:53

标签: php

我正在看这个函数:用于PHP的serialize(),我真的不明白它的功能是什么。有人能提供一个简单的输出示例吗?

3 个答案:

答案 0 :(得分:14)

基本上,serialize的目标是将任何(alsmost)类型的数据转换为字符串,因此可以传输,存储,...

一个简单的例子:

$my_array = array(
    'a' => 10,
    'glop' => array('test', 'blah'),
);
$serialized = serialize($my_array);
echo $serialized;

会得到这个输出:

a:2:{s:1:"a";i:10;s:4:"glop";a:2:{i:0;s:4:"test";i:1;s:4:"blah";}}


然后,您可以unserialize该字符串,以获取原始数据:

$serialized = 'a:2:{s:1:"a";i:10;s:4:"glop";a:2:{i:0;s:4:"test";i:1;s:4:"blah";}}';
$data = unserialize($serialized);
var_dump($data);

会得到你:

array
  'a' => int 10
  'glop' => 
    array
      0 => string 'test' (length=4)
      1 => string 'blah' (length=4)


常见用途包括:

  • 能够将(几乎)任何类型的PHP数据从一个PHP脚本传输到另一个PHP脚本
  • 能够将(几乎)任何类型的PHP数据存储在单个数据库字段中 - 即使它在数据库方面不是很好的做法,它有时也很有用
  • 能够将数据存储在某些缓存机制(APC,memcached,files,...)中,您只能存储字符串

请注意,当您只使用PHP 时,使用serialize非常有用(因为它是一种特定于PHP的格式,它几乎可以处理任何类型的PHP数据,并且确实是快);但是当你必须使用除PHP 之外的东西(因为它是特定于PHP的)时,它并不是那么好。在这些情况下,您可以使用XML,JSON(请参阅json_encodejson_decode),...


在PHP手册中,您还可以阅读Object Serialization部分,顺便说一句。

答案 1 :(得分:2)

例如,如果要保存在数据库行中规范化的数组或对象,serialize()(和unserialize())是您的朋友,因为您无法先存放数组或对象把它变成一根绳子。

json_encode()json_decode()类似,但它们编码为JSON。

答案 2 :(得分:0)

请参阅this example,应该非常清楚。