php如何序列化对象数组?

Posted

技术标签:

【中文标题】php如何序列化对象数组?【英文标题】:php how to serialize array of objects? 【发布时间】:2011-02-10 18:06:12 【问题描述】:

我有一个名为“Call”的小类,我需要将这些调用存储到一个平面文件中。我创建了另一个名为“CallStorage”的类,其中包含一个数组,我将这些调用放入其中。

我的问题是我想将这个数组存储到磁盘上,以便以后读取它并从该数组中获取调用。

我尝试使用 serialize() 和 unserialize() 来实现这一点,但它们的行为似乎有些奇怪,并且部分信息会丢失。

这就是我正在做的:

//write array to disk
$filename = $path . 'calls-' . $today;
$serialized = serialize($this->array);
$fp = fopen($filename, 'a');
fwrite($fp, $serialized);
fclose($fp);

//read array from serialized file

$filename = $path . 'calls-' . $today;
if (file_exists($filename)) 
    $handle = fopen($filename, 'r');
    $contents = fread($handle, filesize($filename));
    fclose($handle);
    $unserialized = unserialize($contents);
    $this->setArray($unserialized);

谁能看到我做错了什么,或者什么。我还尝试序列化和编写包含纯字符串的数组。我也没有设法让它工作。我有 Java 背景,所以我不明白为什么如果它被序列化,我不能将一个数组写入磁盘。 :)

【问题讨论】:

【参考方案1】:

首先,使用简写形式:

file_put_contents($filepath,serialize($var));

$var=unserialize(file_get_contents($filepath));

然后在每个阶段输出/调试,找出问题所在。

【讨论】:

似乎问题出在我的读写功能上。所以 file_put_contents() 和 file_get_contents() 解决了这个问题,现在序列化工作如我所料!谢谢! :)

以上是关于php如何序列化对象数组?的主要内容,如果未能解决你的问题,请参考以下文章

JSON PHP中,Json字符串反序列化成对象/数组的方法

php将对象数组转成普通数组

php将数组或对象原样写入或保存到文件有三种方法可以实现

如何反序列化包含多维数组的json对象?

PHP中如何定义对象类型数组

如何使用 Jackson 反序列化来自 json 对象的对象数组