反序列化数组

时间:2012-02-04 12:54:49

标签: php serialization

我从wordpress中的post meta字段返回一个序列化数组,称为groups。

以下是发布元字段的方式。

a:2:{i:0;s:1:"1";i:1;s:1:"2";}

我如何循环使用这个并运行if语句,即

$mydata = unserialize($meta['groups']);

print_r($mydata);

对于我来说,unserialzed并不是我从print_r得到的输出

a:2:{i:0;s:1:"1";i:1;s:1:"2";}

与上述相同。

使用序列化和非序列化数组的任何帮助从未使用过。

3 个答案:

答案 0 :(得分:1)

可行magic_quotes有效。使用stripslashes

删除由它生成的斜杠
$mydata = unserialize(stripslashes($meta['groups']));

如果你想从整个GPC-Array中去除斜线,请使用它(Credits转到PHP.net上的this评论):

if (get_magic_quotes_gpc()) {
      $strip_slashes_deep = function ($value) use (&$strip_slashes_deep) {
          return is_array($value) ? array_map($strip_slashes_deep, $value) : stripslashes($value);
      };
      $_GET = array_map($strip_slashes_deep, $_GET);
      $_POST = array_map($strip_slashes_deep, $_POST);
      $_COOKIE = array_map($strip_slashes_deep, $_COOKIE);
  }

答案 1 :(得分:0)

这是我使用命令行PHP获得的:

php > $x = unserialize('a:2:{i:0;s:1:"1";i:1;s:1:"2";}');
php > print_r($x);
Array
(
    [0] => 1
    [1] => 2
)

似乎$meta['groups']不包含序列化字符串。

答案 2 :(得分:0)

print_r(unserialize('a:2:{i:0;s:1:"1";i:1;s:1:"2";}'));

将打印

Array
(
    [0] => 1
    [1] => 2
)

反序列化工作正常。你怎么知道$meta['groups']是否包含你想要的东西?