将数据库中的序列化数据转换为PHP数组

问题描述:

我有一些自定义数据输入到每个WooCommerce订单的postmeta表中。将数据库中的序列化数据转换为PHP数组

a:2:{i:6517;a:2:{i:0;a:5:{s:10:"first_name";s:5:"Roger";s:9:"last_name";s:6:"Rabbit";s:5:"email";s:19:"[email protected]";s:7:"is_lead";b:1;s:12:"is_cancelled";b:0;}i:1;a:5:{s:10:"first_name";s:7:"Jessica";s:9:"last_name";s:6:"Rabbit";s:5:"email";s:21:"[email protected]";s:7:"is_lead";b:0;s:12:"is_cancelled";b:0;}}i:6518;a:2:{i:0;a:5:{s:10:"first_name";s:6:"Mickey";s:9:"last_name";s:5:"Mouse";s:5:"email";s:20:"[email protected]";s:7:"is_lead";b:0;s:12:"is_cancelled";b:0;}i:1;a:5:{s:10:"first_name";s:6:"Donald";s:9:"last_name";s:4:"Duck";s:5:"email";s:20:"[email protected]";s:7:"is_lead";b:0;s:12:"is_cancelled";b:0;}}} 

- 下面编辑---

我最初以为这是使用JSON编码的,但下面的答案理解它实际上是序列化的数据。

我想将这个数据转换成一个PHP数组 - 像下面的东西 - 所以我可以玩它。

$data = array ( 
    '6517' => array ( 
     0 => array ( 
      'first_name' => 'Roger', 
      'last_name' => 'Rabit', 
      'email' => '[email protected]', 
      'is_lead' => 1, 
      'is_cancelled' => 0, 
     ), 
     1 => array (
      'first_name' => 'Jessica', 
      'last_name' => 'Rabit', 
      'email' => 'jessic[email protected]', 
      'is_lead' => 0, 
      'is_cancelled' => 0, 
     ) 
    ), 
    '6518' => array (
     0 => array (
      'first_name' => 'Mickey', 
      'last_name' => 'Mouse', 
      'email' => '[email protected]', 
      'is_lead' => 1, 
      'is_cancelled' => 0, 
     ), 
     1 => array (
      'first_name' => 'Donald', 
      'last_name' => 'Duck', 
      'email' => '[email protected]', 
      'is_lead' => 0, 
      'is_cancelled' => 0, 
     ) 
    ) 
); 

任何想法非常感谢!

+0

这不是JSON格式,你必须创建自己的解析器,或查看PHP反序列化功能http://php.net/manual/it/function.unserialize.php –

+3

使用'unserialize' –

+2

这不是JSON,它是PHP的'serialize'格式。 http://php.net/unserialize – deceze

根据上面的注释,这些数据是序列化的而不是JSON编码的。对于任何人阅读,以下工作良好。

// Pull serialized data 
$serializeddata = 'a:2:{i:6517;a:2:{i:0;a:5:{s:10:"first_name";s:5:"Roger";s:9:"last_name";s:6:"Rabbit";s:5:"email";s:19:"[email protected]";s:7:"is_lead";b:1;s:12:"is_cancelled";b:0;}i:1;a:5:{s:10:"first_name";s:7:"Jessica";s:9:"last_name";s:6:"Rabbit";s:5:"email";s:21:"[email protected]";s:7:"is_lead";b:0;s:12:"is_cancelled";b:0;}}i:6518;a:2:{i:0;a:5:{s:10:"first_name";s:6:"Mickey";s:9:"last_name";s:5:"Mouse";s:5:"email";s:20:"[email protected]";s:7:"is_lead";b:0;s:12:"is_cancelled";b:0;}i:1;a:5:{s:10:"first_name";s:6:"Donald";s:9:"last_name";s:4:"Duck";s:5:"email";s:20:"[email protected]";s:7:"is_lead";b:0;s:12:"is_cancelled";b:0;}}}'; 

// Unserialize it into a standard array 
$array = unserialize($serializeddata); 

// Print Array 
print_r($array);