2008-10-29 143 views
0
a:3:{i:0;i:4;i:1;i:3;i:2;i:2;} 

难道我的系列化有些困惑正确地说,这是大小3其中关键值对0->41->32->2的阵列?我对PHP关联数组

如果是这样,我觉得这种表示非常混乱。起初,我认为这是一个值列表(或包含数组{0, 4, 1, 3, 2, 2}),但我认为a:3:是数组的大小。如果3是大小,那么键和值都出现在括号中,没有办法清楚地标识键/值对而不进行计数。

为了澄清哪里我来自:

为什么PHP开发人员选择以这种方式进行序列化?这有什么优势,让我们说var_dump和/或var_export显示其数据的方式?

回答

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变量类型(资源除外)的通用格式,我认为使用给定格式更简单,因为可以通过逐字读取字符串来重建基础变量。

0

为什么不使用unserialize()函数将数据恢复到以前的状态?

+0

但我想了解serialize()给了我什么。 – 2008-10-29 17:58:25

+0

在编辑它并降低我的评论之前,您的问题没有明确说明。你首先要问的是数据是什么,然后你问为什么PHP开发人员这样做 - 两个不同的问题有不同的答案。 – JamShady 2008-10-29 18:01:58

+0

我删除了downvote。我以为我包括那部分,但我必须在完成之前发布。对于那个很抱歉。 – 2008-10-29 18:06:39

5

是这array(4, 3, 2)

a为阵列,i为整数作为然后键值。你将不得不指望到一个特定的,但PHP总是反序列化整个地段,所以它有一个计数无论如何。

编辑:当你习惯了它时,不会太困惑,但它可能会比较慢。 JSON

注:var_export()不处理 循环引用,因为这将是 接近不可能产生对于 解析的PHP代码。如果 想使用数组或对象的完整 表示, 使用serialize()。

1

序列化的PHP数据并不是真正意义上的人类可读的 - 但据我所知,这不是格式的目标。

我认为格式看起来最大的原因是为了简洁起见,其格式也可能与其处理速度有关。