PHP反序列化用于数组的数据 - 字符串中的子标准字符

时间:2016-01-04 23:26:05

标签: php jquery arrays serialization

我正在使用可嵌套表单的jQuery插件,并使用serialize(通过JS实现)将它们的顺序存储在数据库中。一旦我从数据库中检索这些数据,我就需要能够对它进行反序列化,以便可以使用每一段数据。

序列化和存储的数据示例是

[{"id":"H592736029375"},{"id":"K235098273598"},{"id":"B039571208517"}]

每个序列化数据中存储的ID数量各不相同,JS插件会在序列化周围添加[和]括号。

我使用http://www.unserialize.com/来测试数据的反序列化,并且使用print_r证明它是成功的。我尝试使用以下代码复制它:

<?php
print_r(unserialize('[{"id":"H592736029375"},{"id":"K235098273598"},{"id":"B039571208517"}]'));
?>

但是我收到了错误。我猜我需要使用类似于strip_tags的东西来删除括号,但我不确定。给出的错误如下

Notice: unserialize(): Error at offset 0 of 70 bytes

一旦我有了非序列化数据,我需要能够将每个ID用作变量,我假设这样做,我需要做一些事情:

<?php
$array = unserialize('[{"id":"H592736029375"},{"id":"K235098273598"},{"id":"B039571208517"}]');

foreach($array as $key => $val)
{
    // Do something here, use each individial ID however
    // e.g database insert using $val['id']; to get H592736029375 then K235098273598 and finally B039571208517
}
?>

是否有人能够提供任何帮助,以便如何正确地剥离序列化数据,以便在数组中准备好ID,然后在foreach函数中使用?

非常感谢。

1 个答案:

答案 0 :(得分:3)

PHP的serialize()unserialize()函数是特定于PHP的,不适用于与其他语言通信。

看起来你的JS序列化函数实际上是在生成JSON,所以在PHP方面,使用json_decode()而不是反序列化。

Here's a fiddle

$data = '[{"id":"H592736029375"},{"id":"K235098273598"},{"id":"B039571208517"}]';
$array = json_decode($data, true);
foreach($array as $index=>$data){
    echo "$index) {$data['id']}\n";
}

输出:

0) H592736029375 
1) K235098273598 
2) B039571208517
相关问题