我对PHP关联数组
问题描述:
a:3:{i:0;i:4;i:1;i:3;i:2;i:2;}
难道我的系列化有些困惑正确地说,这是大小3其中关键值对0->4
,1->3
和2->2
的阵列?我对PHP关联数组
如果是这样,我觉得这种表示非常混乱。起初,我认为这是一个值列表(或包含数组{0, 4, 1, 3, 2, 2}
),但我认为a:3
:是数组的大小。如果3
是大小,那么键和值都出现在括号中,没有办法清楚地标识键/值对而不进行计数。
为了澄清哪里我来自:
为什么PHP开发人员选择以这种方式进行序列化?这有什么优势,让我们说var_dump和/或var_export显示其数据的方式?
答
$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变量类型(资源除外)的通用格式,我认为使用给定格式更简单,因为可以通过逐字读取字符串来重建基础变量。
答
是这array(4, 3, 2)
a
为阵列,i
为整数作为然后键值。你将不得不指望到一个特定的,但PHP总是反序列化整个地段,所以它有一个计数无论如何。
编辑:当你习惯了它时,不会太困惑,但它可能会比较慢。 JSON
注:var_export()不处理 循环引用,因为这将是 接近不可能产生对于 解析的PHP代码。如果 想使用数组或对象的完整 表示, 使用serialize()。
答
序列化的PHP数据并不是真正意义上的人类可读的 - 但据我所知,这不是格式的目标。
我认为格式看起来最大的原因是为了简洁起见,其格式也可能与其处理速度有关。
但我想了解serialize()给了我什么。 – 2008-10-29 17:58:25
在编辑它并降低我的评论之前,您的问题没有明确说明。你首先要问的是数据是什么,然后你问为什么PHP开发人员这样做 - 两个不同的问题有不同的答案。 – JamShady 2008-10-29 18:01:58
我删除了downvote。我以为我包括那部分,但我必须在完成之前发布。对于那个很抱歉。 – 2008-10-29 18:06:39