从mysql数据库检索的解码字符串

时间:2018-08-18 18:07:10

标签: php mysql

我正在使用php 7.1.8,并且在我的mysql数据库中保存了以下字符串:

$dat = a:5:{i:0;s:4:"6162";i:1;s:4:"6160";i:2;s:4:"6236";i:3;s:4:"6326";i:4;s:4:"6308";}

我尝试将$dat转换为以下内容:

$dat = json_decode($dat, true);

但是,json_decode()返回null

有人建议我在做什么错吗?

2 个答案:

答案 0 :(得分:5)

这显然是一个序列化数组,所以我们使用

unserialize()

不是

json_decode();

我怎么知道这些a:5:{..} i:0s:4:"6162"的类型和数量/数量/长度。因此a是包含5个元素的数组,分别为int 0string 4“ 6162”。

如果这是JSON,则类似于'["6162","6160","6308" ... ]'。如您所见,JSON占用的空间也要少得多。

但是,这是序列化的形式。那就是说,有一个特殊的序列化用于会话,我不太熟悉,但是我不认为这是一个特别的序列化,特别是如果它来自wordpress。

一个警告,尽管可以手动编辑Json而不是向前推进,但不要尝试使用这种类型的序列化来实现,但是可以这样做,但是会带来灾难..大声笑

通常,您可以将它们视为同一类函数,它们都将复杂的结构转换为字符串。序列化的好处是(如果要调用它)将整个对象存储在字符串中,这是JSON本身无法做到的。但是(serialize)是PHP的东西,因此它使数据的可移植性降低。更何况,如果您保存对象,这就是为什么我说这可能是有好处的,只有在考虑了此数据的将来使用之后才应该这样做,因为它只能由PHP使用,并且仅当这些类保存在它仍然可以访问(如果已保存对象)。

这就是为什么很多时候您可能会看到使用JSON而不是序列化的原因。

 $dat = 'a:5:{i:0;s:4:"6162";i:1;s:4:"6160";i:2;s:4:"6236";i:3;s:4:"6326";i:4;s:4:"6308";}';
 var_export(unserialize($dat));

输出

array (
  0 => '6162',
  1 => '6160',
  2 => '6236',
  3 => '6326',
  4 => '6308',
);

实时测试Sandbox

答案 1 :(得分:1)

在这里找到答案

$dat = 'a:5:{i:0;s:4:"6162";i:1;s:4:"6160";i:2;s:4:"6236";i:3;s:4:"6326";i:4;s:4:"6308";}';
$arr = unserialize($dat);
print_r($arr);