Моя проблема очень проста.
Я не нашел ни одного примера, который бы соответствовал моим потребностям относительно того, что именно 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);
?>
вывод:
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, такими как базы данных, текстовые файлы, сокеты. Стандартная функция PHP
serialize
- это просто формат для выражения такой вещи, она сериализует структуру данных в строковое представление, уникальное для PHP и может быть преобразовано в объект PHP с помощьюunserialize
. Однако существует множество других форматов, например JSON или XML.Возьмем, к примеру, эту распространенную проблему:
Как передать массив PHP в Javascript?
PHP и Javascript могут общаться только через строки. Вы можете
"foo"
очень легко передать строку в Javascript. Вы можете1
очень легко передать это число в Javascript. Вы можете передать булевы значенияtrue
иfalse
легко JavaScript. Но как передать этот массив в Javascript?Ответ - сериализация . В случае PHP / Javascript JSON на самом деле является лучшим форматом сериализации:
Javascript может легко превратить это в фактический массив Javascript.
Это так же верно, как и представление той же структуры данных:
Но в значительной степени только PHP использует его, этот формат почти нигде не поддерживается.
Это очень распространено и хорошо поддерживается:
Есть много ситуаций, когда вам нужно передать сложные структуры данных в виде строк. Сериализация, представляющая произвольные структуры данных в виде строк, решает, как это сделать.
источник
i:1
= целое число 1,s:6:"elem 1"
= строка из 6 символов "elem 1" ... А какой пример вы просите, я думал, что привел?echo json_encode($array);
Как именно вы его пройдете, зависит от обстоятельств. Не зацикливайтесь на этом.Использование PHP serialize () unserialize ()
http://freeonlinetools24.com/serialize
Что дает вам результат примерно так
снова, если вы хотите вернуть исходный массив, просто используйте функцию PHP unserialize ()
Я надеюсь, это поможет
источник
Если вы хотите, чтобы ваше значение php сохранялось, вы должны превратить его в строковое значение, это то, что делает serialize () . А unserialize () делает обратное.
источник
serialize()
иunserialize()
созданы.Запустите эту программу, она выведет вывод
здесь
a = размер массива
i = количество номеров массива
s = размер значений массива
вы можете использовать сериализацию для хранения массива данных в базе данных
и можете извлекать и не сериализовать данные для использования.
источник
Большинство носителей могут хранить строку типы. Они не могут напрямую хранить структуру данных PHP, такую как массив или объект, и не должны, так как это может связать носитель данных с PHP.
Вместо этого
serialize()
позволяет сохранить одну из этих структур в виде строки. Его можно десериализовать из строкового представления с помощьюunserialize()
.Если вы знакомы с
json_encode()
иjson_decode()
(и JSON в целом), концепция аналогична.источник
serialize()
появился раньше JSON.Пожалуйста! пожалуйста! пожалуйста! НЕ сериализуйте данные и не помещайте их в свою базу данных. Таким образом можно использовать сериализацию, но здесь не хватает реляционной базы данных и типов данных, присущих вашему ядру базы данных. Это делает данные в вашей базе данных непереносимыми, трудными для чтения и может усложнить запросы. Если вы хотите, чтобы ваше приложение было переносимым на другие языки, например, вы обнаружите, что хотите использовать Java для какой-то части вашего приложения, в которой имеет смысл использовать Java, сериализация станет головной болью. Вы всегда должны иметь возможность запрашивать и изменять данные в базе данных без использования стороннего посреднического инструмента для манипулирования данными, которые необходимо вставить.
это действительно затрудняет поддержку кода, кода с проблемами переносимости и данных, которые труднее перенести в другие системы RDMS, новую схему и т.д. поля, которые вы сериализовали.
Это не значит, что serialize () бесполезен. Это не ... Хорошим местом для использования может быть файл кеша, содержащий, например, результат операции с интенсивным использованием данных. Есть множество других ... Просто не злоупотребляйте сериализацией, потому что следующему парню, который придет, будет кошмар обслуживания или миграции.
Хороший пример serialize () и unserialize () может быть таким:
Десериализовать на странице
источник
Из http://php.net/manual/en/function.serialize.php :
По сути, он принимает массив или объект php и преобразует его в строку (которую вы затем можете передавать или хранить по своему усмотрению).
Unserialize используется для преобразования строки обратно в объект.
источник
По сути, когда вы сериализуете массивы или объекты, вы просто переводите их в допустимый строковый формат, чтобы их можно было легко хранить вне сценария php.
Примечание для объекта вы должны использовать магические методы __sleep и __wakeup. __sleep вызывается serialize (). Метод сна вернет массив значений из объекта, который вы хотите сохранить.
__wakeup вызывается unserialize (). Метод пробуждения должен принимать несериализованные значения и инициализировать их в объекте.
Для передачи данных между php и js вы должны использовать json_encode, чтобы преобразовать массив php в допустимый формат json. Или наоборот - используйте JSON.parese () для преобразования выходных данных (строки) в действительный объект json. Вы бы хотели сделать это, чтобы использовать локальное хранилище. (автономный доступ к данным)
источник
Да, я могу. Предположим, что нам нужно отслеживать вашу систему, значит, в вашей системе более одного администратора и субадмина. Все они могут вставлять, обновлять или редактировать любую информацию. Позже вам нужно знать, кто вносит это изменение. Для решения этой проблемы вам потребуется сериализация.
Я надеюсь, что это поможет вам.
источник
источник