2013-11-17 2 views
0

Я сериализую два массива.Unserialize 2 массива

a:2:{s:4:"name";s:3:"foo";s:8:"passwort";s:3:"bar";}a:2:{s:4:"name";s:3:"bar";s:8:"passwort";s:3:"foo";} 

Теперь я хочу их неэтериализовать. (They're сохраняется в $ файла)

$db=unserialize(file_get_contents($file)); 
print_r($db); 

Выход:

Array ([name] => foo [passwort] => bar) 

Таким образом, только первый был напечатан ... как можно связать как в одном массиве?

Заранее спасибо

M00LTi

ответ

1

Вы BORKED в сериализации-формат, когда вы приложили упорядоченный массив уже сериализованном один. Сериализованная переменная должна отображать только одну переменную. Если вы хотите сериализовать два массива в одну структуру, сериализовать массив, содержащий как:

serialize(array($arr1, $arr2)) 

Вы можете десериализируются как: list($arr1, $arr2) = unserialize($data), или делать $arrays = unserialize($data), а затем доступ к $arrays[0] и $arrays[1].

Если вы хотите отремонтировать ваш несуществующий формат, вам придется извлечь эти две части самостоятельно и вызвать unserialize() на каждую часть. Если вы хорошо знаете свои данные, вы можете сделать это вручную на этот раз или реализовать небольшой синтаксический анализатор для сериализованного формата, чтобы узнать, когда закончится предыдущая запись, и вы можете начать сериализацию новой записи (путем сканирования) за пределами строка).