在数组中反序列化的最佳方法

时间:2009-10-12 20:04:40

标签: php serialization

我有一个包含类似于以下示例的序列化数据的数组。

Array
(
    [0] => Array
        (
            [id] => 4
            [data] => a:2:{s:6:"Series";a:1:{s:11:"description";s:11:"hello world";}s:4:"Type";a:1:{i:0;s:1:"1";}}
            [created] => 2009-10-12 18:45:35
        )
    [1] => Array
        (
            [id] => 3
            [data] => a:2:{s:6:"Series";a:1:{s:11:"description";s:11:"hello world";}s:4:"Type";a:1:{i:0;s:1:"1";}}
            [created] => 2009-10-12 17:39:41

        )
    ...
)

什么是反序列化数据键值并用其内容替换序列化数据的最佳方法?

我已经尝试使用引用进行循环,尽管数组中的最后两个条目不应该是相同的,但它可以正常工作。

foreach($data as &$item) {
    $item['data'] = unserialize($item['data']);
}

3 个答案:

答案 0 :(得分:3)

foreach循环中使用引用可以引入难以跟踪和神秘的行为。您应该使用简单的for - 循环。

$num = count($data);
for ($i = 0; $i < $num; $i++)
{
    $item[$i]['data'] = unserialize($item[$i]['data']);
}

答案 1 :(得分:1)

另一种方式:

foreach ($data as $key => $item) {
    $data[$key]['data'] = unserialize($item['data']);
}

或者:

foreach ($data as $item) {
    $item['data'] = unserialize($item['data']);
    $data[] = $item;
}
$data = array_slice($data, count($data)/2);

答案 2 :(得分:0)

这样的事情会起作用:

$data2 = array ();
foreach($data as $item) {
    $item['data'] = unserialize($item['data']);
    $data2[] = $item;
}

如果您不想使用其他阵列:

foreach($data as $k => $item) {
    $data[$k]['data'] = unserialize($item['data']);
}