解码从mysql db中检索的字符串

Ann*_*lee 1 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.

有什么建议我做错了吗?

Art*_*nix 5

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

unserialize()
Run Code Online (Sandbox Code Playgroud)

json_decode();
Run Code Online (Sandbox Code Playgroud)

我怎么知道,这些a:5:{..} i:0s:4:"6162"这是类型和数量/数量/长度.所以a是数组5个项目, int 0string 4"6162".

如果这是JSON,那就像是 '["6162","6160","6308" ... ]'.正如您所看到的,JSON占用的空间也少得多.

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

一句小心谨慎,虽然Json可以手动编辑而不是前进,但是不要尝试使用这种类型的序列化,它可以完成,但它会引发灾难....

通常,您可以将它们视为同一类函数,它们都将复杂结构转换为字符串.Serialize有一个好处(如果你想称之为)将整个对象存储在字符串中,这是JSON本身无法做到的.但是(序列化)虽然是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));
Run Code Online (Sandbox Code Playgroud)

OUTPUT

array (
  0 => '6162',
  1 => '6160',
  2 => '6236',
  3 => '6326',
  4 => '6308',
);
Run Code Online (Sandbox Code Playgroud)

测试它实时沙盒