php反序列化表中的数据不起作用

时间:2013-09-02 09:23:49

标签: php serialization

我需要将一个字符串反序列化为一个数组。这是需要在php中对unosiative数组进行反序列化的字符串。

a:1:{i:0;s:158:"a:6:{s:5:"rowid";s:32:"94ca9ee0c4e3184b50e89e82f80332fb";s:2:"id";
s:2:"68";s:3:"qty";s:1:"1";s:5:"price";
s:2:"20";s:4:"name";
s:5:"Bread";s:8:"subtotal";i:20;}";

}

1 个答案:

答案 0 :(得分:3)

看起来这是双重序列化的。它扩展为具有单个元素的数组,该元素是序列化的关联数组。所以你需要这样做:

$temp = unserialize($data);
$result = unserialize($temp[0]);
var_dump($result);

结果:

array(6) {
  ["rowid"]=>
  string(32) "94ca9ee0c4e3184b50e89e82f80332fb"
  ["id"]=>
  string(2) "68"
  ["qty"]=>
  string(1) "1"
  ["price"]=>
  string(2) "20"
  ["name"]=>
  string(5) "Bread"
  ["subtotal"]=>
  int(20)
}

如果顶级序列化数组中可能有多个元素,请使用array_map反序列化所有元素:

$result = array_map('unserialize', $temp);

$result现在将成为一个二维数组。

我不确定您为何以这种方式存储数据。为什么不一次序列化原始的二维数组,而不是嵌套它们?