Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка PHP 2008.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

5.3 Списки и строки

Функция explode() используется для разбиения строки на более мелкие части (эти части разделяются в строке каким-то специфическим символом типа |). Формат задания функции:

list explode (string $token, string $Str

[, int $limit])

Она получает строку, заданную в ее втором аргументе, и пытается найти в ней подстроки, равные первому аргументу. Затем по месту вхождения этих подстрок строка «разрезается» на части, помещаемые в массив-список, который и возвращается. Если задан параметр $limit, то учитываются только первые ($limit-1) участков «разреза». Таким образом, возвращается список из не более чем $limit элементов.

$st="4597219361|Иванов|Иван|40|ivan@ivanov.com|Текст, содержащий (|)";

$A=explode("|", $st, 6);

// Мы знаем, что там только 6 полей!

//Теперь $А[0] ="Иванов", ... $А[5]= "Текст, содержащий (|)!"

// распределили по переменным

list ($Surname,$Name,$Age,$Email,$Tel)=$A;

Cтрокой разбиения может быть не только один символ, но и небольшая строка.

Функция implode()и ее синоним join() используются для слияния нескольких небольших строк в одну большую, вставляя между ними разделитель:

string implode (string $glue, list $List)

или

string join(string $glue, list $List).

Они берут ассоциативный массив (обычно это список) $List, заданный в ее первом параметре, и «склеивают» его значения при помощи «строки-клея» $glue во втором параметре.

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

5.4 Сериализация

С помощью функций implode() и explode() можно просто сохранить массив, например, в файле, а затем его оттуда считать и быстро восстановить. Однако этот способ имеет ряд существенных недостатков: во-первых, таким образом можно сохранять только массивы-списки (потому что ключи в любом случае теряются), а во-вторых, ничего не выйдет с многомерными массивами. Пусть нам все-таки нужно сохранить какой-то массив (причем неизвестно заранее, сколько у него измерений) в файле, чтобы потом, при следующем запуске сценария, его аккуратно загрузить и продолжить работу.

Для упаковки массива в строку (ведь в файлы можно писать только строки), и для восстановления строки в массив в исходном виде используются функции Serialize() и Unserialize().

Функция Serialize() возвращает строку, являющуюся упакованным эквивалентом некоего объекта $obj, переданного во втором параметре.

string Serialize (mixed $0bj )

При этом совершенно не важно, что это за объект: массив, целое число.

Пример:

$A=array ("а"=>"аа", "b"=>"bb",

"c" = >array ("х"=>"хх"));

$st=Serialize($A) ;

echo $st;

// выведется что-то типа нечто:

//а:2:(s:1:"а";s:2:"аа";s:1:"b";s:2:"bb";s:1:"с";а:1:(s:1:"х";s:2:"хх";))

Функция Unserialize(), наоборот, принимает в лице своего параметра $st строку, ранее созданную при помощи Serialize(), и возвращает целиком объект, который был упакован.

mixed Unserialize (string $st)

Например:

$a=array(l,2,3);

$s=Serialize($a);

$a= "bogus";

echo count ($a) ; // выводит 1

$a=Unserialize ($s) ;

echo count($a); // выводит 3

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