Я использую функцию Serialize для хранения массива в моей базе данных MYSQL, а затем я unSerialize Him на другой странице. Структура массива выглядит так:
Array ( [0] => Array ( [names] => somename1 [rating] => 10 ) [1] => Array ( [names] => somename2 [rating] => 9 ) )
Когда я вставляю массив в базу данных, я использую эту функцию для преобразования ее в строку:
$array_string=mysql_escape_string(serialize($arr));
И затем, когда я делаю unSerialize, я не знаю, как восстановить строку (массив в базе данных) до той структуры, которая была до этого. (как перевести эту строку обратно в массив)
Я знаю, что мне нужно использовать эту строку:
$arr=explode("|",$list);
В некотором роде, но я не могу восстановить его в точно структуру массива, который был раньше. Результат этой строки несколько отличается в структуре массива:
Array ( [0] => Array( [0] => Array ( [names] => d [rating] => 7 ) [1] => Array ( [names] => b [rating] => 6 ) ) )
благодаря
Противоположность сериализации является неэтериализацией .
$old_array = unserialize($serialized_array_string_from_db);
Сохранение значений, сериализованных в базе данных, запрещает их запрашивать отдельно. Вы должны получить сериализованное значение, unserialize, а затем вы можете начать работать с ними. Это не очень эффективно с точки зрения дизайна базы данных. Мое предложение – создать отдельные поля для «имен» и «оценки» в дополнительной таблице.
Хранить массив в базе данных
$array = array('names' => 'somename1', 'rating' => 10); $array_serialized_to_string = serialize($array); doStoreToDb($array_serialized_to_string, somewhere);
Извлечь сериализованный массив из базы данных
$array_serialized_to_string = doFetchFromDb(somewhere); $array = unserialize($array_serialized_to_string);
Разница в структуре массива может быть результатом запроса «возвращаемого набора как массива». Просто удалите внешний массив:
$old_array = unserialize($serialized_array_string_from_db); $array = $old_array[0];
Попробуйте json_encode
и json_decode
$array_to_store = array(....); $str_array = json_encode($array_to_store); //Store $str_array //Retrieve it and to make it an array again $array = json_decode($str_array, true); ******************* Edited *********************
Я не вижу, что не так с сериализацией и unserialize:
$array = array( array( 'names' => 'somename1', 'rating' => 10 ), array( 'names' => 'somename2', 'rating' => 9 ) ); //Array before print_r('<pre>'); print_r($array); //Serialised Array $s = serialize($array); print_r('<pre>'); print_r($s); //Unserialised Array print_r('<pre>'); print_r(unserialize($s));