我已经序列化了两个数组。
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
答案 0 :(得分:1)
当您将序列化数组附加到已经序列化的数组时,您已经将序列化格式设置为borked。序列化变量应该只映射到一个变量。如果要将两个数组序列化为一个结构,请序列化包含以下内容的数组:
serialize(array($arr1, $arr2))
然后,您可以反复序列化list($arr1, $arr2) = unserialize($data)
,或者$arrays = unserialize($data)
,然后访问$arrays[0]
和$arrays[1]
。
如果您想修复已失效的格式,则必须自行提取这两个部分,并在每个部分调用unserialize()
。如果你很了解你的数据,你可以这次手动完成,或者为序列化格式实现一个小的解析器,以发现前一个条目何时结束,你可以开始序列化一个新条目(通过扫描}字符串)。