В
главе 2 были представлены две разновидности массивов, используемых в программах
РНР, - индексируемые и ассоциативные. Вероятно, вы помните, что в индексируемых
массивах при обращении к элементу указывается его позиция, а в ассоциативных массивах
для этой цели используется специальный ключ. Обе разновидности массивов обладают
гибкими и мощными средствами для работы с большими объемами данных В этой
главе рассматриваются различные средства РНР по работе с массивами. К концу этой
главы вы познакомитесь с одномерными и многомерными массивами, сортировкой и перебором
элементов, а также с другими возможностями, часто используемыми при работе с массивами.
Книгу не стоит рассматривать как подробный справочник по всем существующим функциям,
хотя так уж получилось, что в этой главе рассматриваются практически все функции
массивов. Последнюю версию списка функций можно найти на домашней странице РНР
по адресу http://www.php.net. Создание массивов Массив представляет
собой совокупность объектов, имеющих одинаковые размер и тип. Каждый объект в
массиве называется элементом массива. Создать новый массив в РНР несложно. При
объявлении индексируемого массива после имени переменной ставится пара квадратных
скобок ([ ]): $languages [ ] = "Spanish"; // $languages[0]
= "Spanish" После этого в массив можно добавлять новые элементы,
как показано ниже. Обратите внимание: новые элементы добавляются без явного указания
индекса. В этом случае новый элемент добавляется в позицию, равную длине массива
плюс 1: $languages[ ] = "English"; // $1anguages[l] = "English";
$languagest ] = "Gaelic"; // $languages[2] = "Gaelic"; Кроме
того, новые элементы можно добавлять в конкретную позицию массива. Для этого указывается
индекс нрвого элемента: $languages[15] = "Italian"; $languages[22]
= "French"; Ассоциативные массивы создаются аналогичным образом: $languages["Spain"]
= "Spanish"; $languages["France"] = "French"; При
создании массивов используются три стандартные языковые конструкции: аrrау(
); list( ); range( ). Хотя все три случая приводят к одному результату
- созданию массива, в некоторых случаях одна конструкция может оказаться предпочтительнее
других. Далее приведены описания и примеры использования каждой конструкции. аггау(
) Функция array( ) получает ноль или более элементов и возвращает массив,
состоящий из указанных элементов. Ее синтаксис: array array ( [элемент1,
элемент2...] ) Вероятно, array( ) является всего лишь более наглядной записью
для создания массива, используемой для удобства программиста. Ниже показан пример
использования array( ) для создания индексируемого массива: $languages =
array ("English". "Gaelic". "Spanish"); //
$languages[0] = "English". $languages[1] = "Gaelic", //
$languages[2] = "Spanish" А вот как array( ) используется при
создании ассоциативных массивов: $languages = array("Spain" =>
"Spanish", "Ireland" => "Gaelic". "United
States" => "English"); // $languages["Spain"]
= "Spanish" // $languages["Ireland"] = "Gaelic" //
$languages["United States"] = "English" Ассоциативные
массивы особенно удобны в тех ситуациях, когда числовые индексы не имеют логического
соответствия. Например, в предыдущем примере названия стран вполне естественно
ассоциируются с языками. Попробуйте-ка воплотить эту логическую связь при помощи
цифр! list( ) Конструкция list( ) похожа на аrrау( ), однако ее главная
задача - одновременное присваивание значений, извлеченных из массива, сразу нескольким
переменным. Синтаксис команды list( ): void list (переменная1 [. переменная2
, ...] ) Конструкция list() особенно удобна при чтении информации из базы
данных или файла. Допустим, вы хотите отформатировать и вывести данные, прочитанные
из текстового файла. Каждая строка файла содержит сведения о пользователе (имя, профессия
и любимый цвет); компоненты записи разделяются вертикальной чертой (|). Типичная
строка выглядит так: Nino Sanzi|Professional Golfer|green При помощи
list ( ) можно написать простой цикл, который будет читать каждую строку, присваивать
ее компоненты переменным, форматировать и отображать данные. Приведенный ниже
листинг демонстрирует возможность одновременного присваивания нескольким переменным
с использованием list ( ): // Читать строки, пока не будет достигнут конец
файла while ($line = fgets ($user_file. 4096)) : // Разделить строку
функцией split( ). // Компоненты присваиваются переменным Sname. $occupation
и Scolor. list ($name, $occupation, $color) = split( "|", $line); //
Отформатировать и вывести данные print "Name: Sname <br>"; print
"Occupation: Soccupation <br>"; print "Favorite color:
Scolor <br>"; endwhile; Каждая строка файла читается, форматируется
и выводится в следующем виде: Name: Nino Sanzi Occupation: Professional
Golfer Favorite color: green В приведенном примере применение list(
) зависит от разделения строки на элементы функцией split( ). Элементы, полученные
в результате деления, присваиваются, соответственно, переменным $name, $occupation
и $color. Дальше все сводится к форматированию данных для вывода в конкретном
браузере. Удобные средства лексического анализа текстовых файлов являются одной
из сильных сторон РНР. Эта тема подробно рассматривается в главах 7 и 8. range
( ) Конструкция range( ) позволяет легко и быстро создать массив целых чисел
из интервала, определяемого верхней и нижней границами. Range( ) возвращает массив,
состоящий из всех целых чисел указанного интервала. Синтаксис range( ): array
range (int нижняя_граница, int верхняя граница) Следующий пример наглядно
показывает, насколько удобна эта конструкция: $lottery = range(0,9); //
$lottery = array(0,1,2,3,4,5,6,7,8,9) Как видно из приведенного фрагмента,
в параметрах range( ) был указан интервал от 0 до 9 и массив $lottery был заполнен
целыми числами из этого интервала.
|