Лучший способ десериализации в массиве - PullRequest
0 голосов
/ 13 октября 2009

У меня есть массив, который содержит сериализованные данные, аналогичные приведенному ниже примеру.

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 ]

3 голосов
/ 13 октября 2009

Использование ссылок в foreach -loop может привести к сложному и загадочному поведению. Вместо этого вы должны использовать простой for -loop.

$num = count($data);
for ($i = 0; $i < $num; $i++)
{
    $item[$i]['data'] = unserialize($item[$i]['data']);
}
1 голос
/ 13 октября 2009

Еще один способ:

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);
0 голосов
/ 13 октября 2009

Нечто подобное будет работать:

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

Если вы не хотите использовать другой массив:

foreach($data as $k => $item) {
    $data[$k]['data'] = unserialize($item['data']);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...