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



我正在使用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

有什么建议我做错了什么吗?

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

unserialize()

json_decode();

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

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

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

需要注意的是,虽然 Json 可以手动编辑,但不要尝试使用这种类型的序列化,它可以完成,但它会带来灾难......哈哈

通常,您可以将它们视为同一类函数,它们都将复杂的结构转换为字符串。 序列化的好处(如果你想这么称呼它的话(是将整个对象存储在字符串中,这是 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));

输出

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

实时测试沙盒

在这里找到答案

$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);

最新更新