a:3:{i:0;i:4;i:1;i:3;i:2;i:2;}
我是否正确地说这是一个大小为3的数组,其中键值对是0->4
,1->3
和2->2
?
如果是这样,我发现这种表现非常混乱。起初,我认为这是一个值列表(或包含{0, 4, 1, 3, 2, 2}
的数组),但我认为a:3
:是数组的大小。如果3
是大小,那么键和值都会出现在括号中,无法清楚地标识键/值对而无需计算。
澄清我来自哪里:
为什么PHP开发人员选择以这种方式序列化?这有什么好处,让我们说var_dump和/或var_export显示其数据的方式?
答案 0 :(得分:5)
是的array(4, 3, 2)
a
表示数组,i
表示整数作为键然后是值。你必须要计算到一个特定的,但PHP总是反序列化整个批次,所以无论如何它都有一个计数。
编辑:当你习惯它时,它不会太混乱,但它可能有点啰嗦,例如, JSON
注意:var_export()无法处理 循环引用 几乎不可能产生 可解析的PHP代码。如果你 想要充分发挥作用 表示数组或对象, 使用serialize()。
答案 1 :(得分:3)
$string="a:3:{i:0;i:4;i:1;i:3;i:2;i:2;}";
$array=unserialize($string);
print_r($array);
outpts:
Array
(
[0] => 4
[1] => 3
[2] => 2
)
如果认为重点是PHP不区分整数索引数组和字符串索引哈希表。序列化格式可以完全相同的方式用于哈希表:a:<<size>>:{<<keytype>>:<<key>>;<<valuetype>>:<<value>>;...}
由于格式不是人类可读的,而是提供表示所有PHP变量类型(资源除外)的通用格式,我认为使用给定格式更简单,因为可以重建基础变量通过逐字符读取字符串。
答案 2 :(得分:1)
序列化的PHP数据实际上并不是人类可读的 - 据我所知,这不是格式的目标。
我认为格式看起来像它的方式的最大原因是为了简洁,它的形式也可能具有与其处理速度相关的基础。
答案 3 :(得分:0)
为什么不使用unserialize()函数将数据恢复到之前的状态?