如何破译以下数组

时间:2015-05-05 作者:LAL

我创建了一个自定义键,并希望使用下拉框在插件中使用数组在键中存储多个值,然而,我打印出了数组并返回了该值。。。

Array ( [0] => a:2:{i:0;s:2:"75";i:1;s:2:"68";} )
我的想法是,这只会增加另一个价值[1] => \'content\', [2] => \'lkajsdf\'. 这就是我想要它发生的方式,但我得到了上面的结果。它存储我选择的两个ID值7568.

那么,这个结果意味着什么呢?

3 个回复
最合适的回答,由SO网友:bosco 整理而成

你看到的是serialized representation 阵列的Array( \'75\', \'68\' ). 序列化是PHP将数据对象存储为字符串的过程,就像JSON是Javascript对象的字符串表示形式一样。PHP数据结构可以通过PHP的serialize(), 然后再次使用unserialize().

WordPress还提供仅在需要时执行必要操作的函数,以防止意外的双重序列化或非序列化:maybe_serialize()maybe_unserialize(). 您也可以使用WordPress检查自己is_serialized().

来自PHP的评论serialize(), 序列化数据对象的结构如下所示:

一串s:size:value;

整数i:value;

布尔型b:value; (不存储"true""false", 是否存储10)

无效的N;

大堆a:size:{key definition;value definition;(repeated per element)}

对象O:strlen(object name):object name:object

大小s:strlen(property name):property name:property definition;(repeated per property)

字符串值始终位于双引号中。

数组键总是整数或字符串;使用其他类型作为键会产生不需要的结果:

  • null => \'value\' 等于\'s:0:"";s:5:"value";\'
  • true => \'value\' 等于\'i:1;s:5:"value";\'
  • false => \'value\' 等于\'i:0;s:5:"value";\'
  • array(whatever the contents) => \'value\' 等同于“非法偏移类型”警告,因为您不能将数组用作键;但是,如果使用包含数组的变量作为键,则它将等于\'s:5:"Array";s:5:"value";\', 尝试将对象用作键将导致与使用数组相同的行为a:2:{i:0;s:2:"75";i:1;s:2:"68";} 因此:

    • a:2:{ 长度为2的数组,包含:
      • i:0; 在整数键处0 (即索引0):
        • s:2:"75"; 值为“75”的长度为2的字符串i:1; 在整数键处1 (即索引1):
          • s:2:"68" 值为“68”的长度为2的字符串} 数组末尾,交替反映项目的值\'content\'\'lkajsdf\' 而不是它们的数字标识符Array( \'content\', \'lkajsdf\' ) 将序列化为

            a:2:{i:0;s:7:"content";i:1;s:7:"lkajsdf";}

            如果您需要更改WordPress的一些设置,或者直接从数据库中有选择地激活/停用特定插件,了解这一点会很有用。

SO网友:lampyridae

看起来您的多个值只是由PHP的serialize() function.

您可以使用取消序列化unserialize().

SO网友:m4n0

取消序列化后,结果为:

Array
(
   [0] => 75
   [1] => 68
)
您可以在此处找到PHP序列化数组的格式:Serialized PHP string

a:2 此处是对象数组\'s\':<i> 是字符串,其中i是字符串的长度

结束