2012-02-04 57 views
0

我从wordpress中的一个帖子meta域返回一个序列化数组,称为组。反序列化数组

这里是它看起来如何发布元字段。

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";} 

这是同上。

任何关于使用串行化和非串行化数组的帮助都没有用过。

+0

它正在工作正常看这个http://codepad.org/v7dWWpPn – 2012-02-04 12:59:36

+0

那不是你真正的代码或你真正的输入数据。 – mario 2012-02-04 13:00:06

回答

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']不包含序列化的字符串。

1

显然magic_quotes已激活。剥去由它生成的斜线与stripslashes

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

如果你想从整体GPC阵剥夺斜线使用这个(现金去上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); 
    } 
+0

请注意'array_map'不是递归的。 'array_walk_recursive'可能会更好。 – kba 2012-02-04 13:04:40

+0

@KristianAntonsen请注意,我将它映射到一个递归函数。 – TimWolla 2012-02-04 13:07:09

+0

我看起来有点太快了。你是绝对正确的。 – kba 2012-02-04 13:10:01

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

将打印

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

的反序列化工作得很好。你怎么知道$meta['groups']是否包含你想要的?