|
Веб-курсы Что это? Оглавление Основы Основы основ Практика Гостевая книга Простой сайт Структура сайта (MVC) Ядро (Light) Ядро Гостевая на SQL Статические страницы Модуль новостей Система регистрации Теория Дебаггинг Регулярные выражения Введение в ООП Паттерны проектирования Репозитарий BB-code Почтовый класс Пагинатор Всякие полезности Download Полезные утилиты Разное Видеокурсы Последние изменения Вопросы и замечания сюда Реклама Диеты для похудения Фреймворк Kohana. Обучение. Мануал на русском. |
СериализацияНу что такое массив, нам уже известно. Куча переменных в одной упаковке. С нми очень удобно работать, так как для массивов придумано множество функций. Но есть одна загвоздка. Как сохранить массив для потомков? Пока он в оперативной памяти - все шито-крыто. А как только нам потребуется записать его в файл - вот тут начинается грабля.Дело в том, что если обратиться к массиву, как к строке
то на свет явится такое безобразие:
То есть что массив - понятно, а что в нем, история умалчивает. А для того, чтобы записать данные в файл, их нужно представить в виде строки, ни как не иначе. И тут начинаются изобретения. Можно записать массив как таковой в исполняемый файл. Но во первых, его будет крайне сложно редактировать, а во вторых нам нужен простой, текстовый файл, а не исполняемый. Можно расположить элементы на строках, а потом достать функцией file(). Но опять же такой способ работает только с простыми массивами. Для ассоциативных и вложенных это не годится. Многие пытаются оказаться от этого в пользу хранения множественных данных в строке с разделителями. Допустим так:
В результате получается примерно это:
что и записывается в файл. А потом разбирается так же в цикле функцией explode() Но это чревато тем, что разделитель может попасть в текст и порядок весь нарушится. Да и циклы совсем не радуют. Кроме того, функция explode() очень прожорлива и требует много оперативной памяти. Так какой же выход? На самом деле все очень просто. Для этой цели придуманы специальные функции - serialize() и unserialize() Первая преобразует массив в строку таким образом, что вторая может спокойно и безопасно массив из неё восстановить. Механизм такой. Берем массив, сериализуем его и смотрим, что вышло.
Вышла странная строка с какими то кракозяблами.
a:2: обозначает, что в массиве два элемента. Дальше в скобках сами элементы. они тоже промаркированы. s:5: обозначает, что в ключе или значении (что идет за этим) пять символов. Ну а дальше сам ключ или элемент. Таким образом, зная сколько где и чего, можно легко восстановить справедливость. Допустим мы запишем полученную строку в файл, а потом, прочитав оттуда, преобразуем обратно в массив функцией unserialize()
На выходе мы получим то, что и требовалось:
Причем этот массив останется записанным в файл и можно будет использовать его по назначению. |