我正在使用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
。
有人建议我在做什么错吗?
答案 0 :(得分:5)
这显然是一个序列化数组,所以我们使用
unserialize()
不是
json_decode();
我怎么知道这些a:5:{..}
i:0
和s:4:"6162"
的类型和数量/数量/长度。因此a
是包含5个元素的数组,分别为int 0
和string 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);