Как использовать php serialize () и unserialize ()

Моя проблема очень проста.

Я не нашел никакого примера для удовлетворения моих потребностей относительно того, что именно serialize() и unserialize() означает в php? Они просто приводят пример – сериализуют массив и показывают результат в необъяснимом формате. Трудно понять основную концепцию, проходящую через их жаргон.

РЕДАКТИРОВАТЬ:

 <?php $a= array( '1' => 'elem 1', '2'=> 'elem 2', '3'=>' elem 3'); print_r($a); echo ("<br></br>"); $b=serialize($a); print_r($b); ?> 

Ouput:

 Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 ) a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";} 

Я не понимаю второй результат. Кроме того, может ли кто-нибудь привести пример ситуации, когда мне нужно сериализовать массив php, прежде чем использовать его?

Массив PHP или объект или другая сложная структура данных не могут быть перемещены или сохранены или использованы иным образом вне исполняемого скрипта PHP . Если вы хотите сохранить такую ​​сложную структуру данных за пределы одного запуска скрипта, вам необходимо ее сериализовать . Это просто означает, что структура превращается в «более низкий общий знаменатель», который может обрабатываться другими вещами, кроме PHP, такими как базы данных, текстовые файлы, сокеты. Стандартная serialize PHP-функций – это просто формат для выражения такой вещи, она сериализует структуру данных в строковое представление, уникальное для PHP, и может быть изменено на PHP-объект с использованием unserialize . Есть много других форматов, хотя, например, JSON или XML.


Возьмем, к примеру, эту общую проблему:

Как передать массив PHP в Javascript?

PHP и Javascript могут общаться только через строки. Вы можете легко передать строку "foo" в Javascript. Вы можете легко передать номер 1 в Javascript. Вы можете легко передавать логические значения true и false в Javascript. Но как передать этот массив в Javascript?

 Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 ) 

Ответ – сериализация . В случае PHP / Javascript JSON на самом деле является лучшим форматом сериализации:

 { 1 : 'elem 1', 2 : 'elem 2', 3 : 'elem 3' } 

Javascript может легко изменить это на реальный массив Javascript.

Это справедливо и для представления одной и той же структуры данных:

 a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";} 

Но в значительной степени только PHP использует его, поддержки в этом формате немного больше.
Это очень распространено и хорошо поддерживается, хотя:

 <array> <element key='1'>elem 1</element> <element key='2'>elem 2</element> <element key='3'>elem 3</element> </array> 

Существует много ситуаций, когда вам нужно передавать сложные структуры данных в виде строк. Сериализация, представляющая произвольные структуры данных как строки, решает, как это сделать.

Использование PHP serialize () unserialize ()

http://freeonlinetools24.com/serialize

 echo '<pre>'; // say you have an array something like this $multidimentional_array= array( array( array("rose", 1.25, 15), array("daisy", 0.75, 25), array("orchid", 4, 7) ), array( array("rose", 1.25, 15), array("daisy", 0.75, 25), array("orchid", 5, 7) ), array( array("rose", 1.25, 15), array("daisy", 0.75, 25), array("orchid", 8, 7) ) ); // serialize $serialized_array=serialize($multidimentional_array); print_r($serialized_array); 

Который дает вам вывод что-то вроде этого

 a:3:{i:0;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:4;i:2;i:7;}}i:1;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:5;i:2;i:7;}}i:2;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:8;i:2;i:7;}}} 

снова, если вы хотите вернуть исходный массив, просто используйте функцию PHP unserialize ()

 $original_array=unserialize($serialized_array); var_export($original_array); 

Я надеюсь, это поможет

Если вы хотите, чтобы ваше значение php сохранялось, вам нужно превратить его в строковое значение, что и делает serialize () . И unserialize () делает обратное.

Большинство носителей данных могут хранить типы строк . Они не могут напрямую хранить структуру данных PHP, такую ​​как массив или объект, и они не должны, поскольку это будет связывать носитель данных с PHP.

Вместо этого serialize() позволяет вам сохранить одну из этих структур в виде строки. Его можно де-сериализовать из строкового представления с помощью unserialize() .

Если вы знакомы с json_encode() и json_decode() (и JSON в целом), концепция аналогична.

С http://php.net/manual/en/function.serialize.php :

Создает сохраняемое представление значения. Это полезно для хранения или передачи значений PHP без потери их типа и структуры.

По сути, он принимает php-массив или объект и преобразует его в строку (которую вы можете передать или сохранить по своему усмотрению).

Unserialize используется для преобразования строки обратно в объект.

Да, я могу. Предположим, что нам нужно отслеживать ваши системные средства. В вашей системе имеется несколько администраторов и субадмин. Все они могут вставлять или обновлять или редактировать любую информацию. В конце вы должны знать, кто это делает. Для решения этой проблемы вам потребуется сериализовать.

  **Explain:**Create a table named history which stores all changes. Each time there is a change insert a new row in this table. It might have this fields: history(id,target_table(name of the table), target_id (ID of the saved entry),create/edit/change data (serialized data of the saved row),date) 

Я надеюсь, что это поможет вам.

В основном

Когда вы сериализуете массивы или объекты, вы просто превращаете их в допустимый строковый формат, чтобы вы могли легко хранить их вне сценария php.

  1. Используйте serilize для сохранения состояния объекта в базе данных (в качестве примера можно взять экземпляр класса пользователя). Затем unserlialize данные для загрузки предыдущего состояния обратно в объект (методы не являются сериализаторами, вам нужно включить класс объектов, чтобы иметь возможность использовать его)
    • персонализация пользователя

Примечание для объекта вы должны использовать магические методы __sleep и __wakeup. __sleep вызывается serialize (). Метод sleep возвращает массив значений из объекта, который вы хотите сохранить.

__wakeup вызывается unserialize (). Метод пробуждения должен принимать неэтериализованные значения и инициализировать их в них в объекте.

Для передачи данных между php и js вы должны использовать json_encode, чтобы превратить php-массив в действительный формат json. Или наоборот: используйте JSON.parese () для преобразования выходных данных (строки) в действительный объект json. Вы хотели бы сделать это, чтобы использовать локальное хранилище. (автономный доступ к данным)

 <?php $a= array("1","2","3"); print_r($a); $b=serialize($a); echo $b; $c=unserialize($b); print_r($c); 

Запустите эту программу, чтобы отобразить ее вывод

 a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";} 


Вот
a = размер массива
i = количество номеров массивов
s = размер значений массива

вы можете использовать serialize для хранения массива данных в базе данных
и может извлекать и UN-сериализовать данные для использования.