反序列化两个数组

时间:2013-11-17 19:44:06

标签: php serialization

我已经序列化了两个数组。

a:2:{s:4:"name";s:3:"foo";s:8:"passwort";s:3:"bar";}a:2:{s:4:"name";s:3:"bar";s:8:"passwort";s:3:"foo";}

现在我想要反序列化它们。 (它们保存在$ file中)

$db=unserialize( file_get_contents($file) );
print_r($db);

输出:

Array ( [name] => foo [passwort] => bar )

所以只打印了第一个......如何将两者捆绑在一个阵列中?

提前致谢

M00LTi

1 个答案:

答案 0 :(得分:1)

当您将序列化数组附加到已经序列化的数组时,您已经将序列化格式设置为borked。序列化变量应该只映射到一个变量。如果要将两个数组序列化为一个结构,请序列化包含以下内容的数组:

serialize(array($arr1, $arr2))

然后,您可以反复序列化list($arr1, $arr2) = unserialize($data),或者$arrays = unserialize($data),然后访问$arrays[0]$arrays[1]

如果您想修复已失效的格式,则必须自行提取这两个部分,并在每个部分调用unserialize()。如果你很了解你的数据,你可以这次手动完成,或者为序列化格式实现一个小的解析器,以发现前一个条目何时结束,你可以开始序列化一个新条目(通过扫描}字符串)。