如何在PHP中解释序列化的关联数组?为什么选择此序列化方法?

如何在PHP中解释序列化的关联数组?为什么选择此序列化方法?,php,arrays,serialization,Php,Arrays,Serialization,我说的对吗,这是一个大小为3的数组,其中键值对是0->4、1->3和2->2 如果是这样的话,我觉得这种说法非常令人困惑。起初,我认为它是一个值列表或包含{0,4,1,3,2,2}的数组,但我认为a:3:是数组的大小。如果3是大小,那么键和值都出现在括号中,如果不进行计数,就无法清楚地识别键/值对 为了澄清我的来历: 为什么PHP开发人员选择以这种方式序列化?与var_dump和/或var_export显示数据的方式相比,这有什么优势?为什么不使用该功能将数据恢复到以前的状态?是的,这是arra

我说的对吗,这是一个大小为3的数组,其中键值对是0->4、1->3和2->2

如果是这样的话,我觉得这种说法非常令人困惑。起初,我认为它是一个值列表或包含{0,4,1,3,2,2}的数组,但我认为a:3:是数组的大小。如果3是大小,那么键和值都出现在括号中,如果不进行计数,就无法清楚地识别键/值对

为了澄清我的来历:

为什么PHP开发人员选择以这种方式序列化?与var_dump和/或var_export显示数据的方式相比,这有什么优势?

为什么不使用该功能将数据恢复到以前的状态?

是的,这是array4、3、2

a表示数组,i表示整数作为键,然后是值。您必须计数才能得到一个特定的值,但是PHP总是反序列化整个值,所以它无论如何都有一个计数

编辑:当你习惯它的时候,它不会太让人困惑,但是与JSON相比,它可能有点冗长

注意:var_导出不处理 循环引用 几乎不可能产生 可解析的PHP代码。如果你 想用全副武装做点什么吗 数组或对象的表示形式, 使用序列化

输出:

$string="a:3:{i:0;i:4;i:1;i:3;i:2;i:2;}";
$array=unserialize($string);
print_r($array);
如果您认为关键是PHP不区分整数索引数组和字符串索引哈希表。序列化格式可用于哈希表,方式完全相同:a::{:;:;…}


由于该格式不是为了让人可读,而是为了提供一种通用格式来表示除资源之外的所有PHP变量类型,我认为使用给定的格式更简单,因为可以通过逐个字符读取字符串来重构底层变量。

序列化的PHP数据并不是真正让人可读的—据我所知,这不是该格式的目标


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

但我试图理解serialize给了我什么。遗憾的是,你的问题在编辑它并否决我的评论之前没有说清楚。首先你似乎要问数据是什么,然后你要问为什么PHP开发人员会这样做——两个不同的问题有不同的答案。我想我包括了那个部分,但我必须在我完成之前发布。很抱歉。我正在尝试确定此格式序列化相对于其他格式序列化的优势。就数据存储而言,它是可行的,但对人类阅读来说也更困难。是否存在性能差异?这只是一种偏好吗?你是说它更快吗?简单数组比序列化数组更容易阅读。只是问问。我的意思是,这涉及到一些安全问题,或者这是一种性能提升技术。我仍在寻找使用它的好理由,你是说它更快吗?简单数组比序列化数组更容易阅读我的意思是,这是一种提高性能的技术吗?我还在寻找一个使用它的好理由。
$string="a:3:{i:0;i:4;i:1;i:3;i:2;i:2;}";
$array=unserialize($string);
print_r($array);
Array
(
    [0] => 4
    [1] => 3
    [2] => 2
)