Intereting Posts
Преобразование временной отметки Unix в MySQL DATETIME URL-адрес запроса и неверный HTML-код Структура данных MySQL по сравнению с рассчитанными данными для данных типа Checkbox Как сгенерировать URL-адреса перенаправления, похожие на stackoverflow с использованием .htaccess и php? Ajax и загрузка CSV-файла добавление шрифта в mPDF Сжатие с помощью Java Decompressing с помощью PHP Сшивание нескольких видео без разрыва Расшифруйте (с PHP) шифрование Java (PBEWithMD5AndDES) Нужно добавить частичное совпадение строк в цикле foreach, чтобы найти ключи массива анонимная производительность функции в PHP Доступ к многомерному массиву с помощью строки с разделителем Разрешение: эта таблица не содержит уникальный столбец. Редактирование сетки, флажок, редактирование, копирование и удаление недоступны Вызов неопределенной функции exif_imagetype () Получить имя категории из идентификатора сообщения

преобразовать массив в строку и вернуть его в массив на PHP

Я использую функцию 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));