我正在使用可嵌套表单的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函数中使用?
非常感谢。
答案 0 :(得分:3)
PHP的serialize()
和unserialize()
函数是特定于PHP的,不适用于与其他语言通信。
看起来你的JS序列化函数实际上是在生成JSON,所以在PHP方面,使用json_decode()
而不是反序列化。
$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