|
лядит несколько приятнее. Конечно, list() можно задействовать
для любого количества переменных: если в массиве не хватит элементов, чтобы их
заполнить, им просто присвоятся неопределенные значения.
Что, если нам нужны только второй и третий элемент массива $List?
В этом случае имеет смысл пропустить первый параметр в инструкции list(), вот
так:
list(,$surname,$age)=$List;
Таким образом, мы получаем в $surname и $age фамилию и возраст человека, не
обращая внимания на его имя в первом аргументе.
Разумеется, можно пропускать любое число элементов, как слева или справа,
так и посередине списка. Главное — не забыть проставить нужное количество
запятых.
Списки и ассоциативные
массивы: путаница?..
Следует сказать несколько слов насчет ассоциативных массивов языка PHP. Во-
первых, на самом деле все "остальные" массивы также являются ассоциативными (в
частности, списки — тоже). Во-вторых, ассоциативные массивы в PHP являются на-
правленными, т. е. в них существует определенный
(и предсказуемый) порядок элементов, не зависящий от реализации. А значит, есть
первый и последний элементы, и для каждого элемента можно определить следую-
щий за ним. Именно по этой причине мне не нравится название "хэш" (в буквальном
переводе — "мешанина"), хотя, конечно, в реализации PHP наверняка используются
алгоритмы хэширования для увеличения быстродействия.
Глава 10. Ассоциативные массивы 171
Операция [] всегда добавляет элемент в конец массива, присваивая ему при этом
такой числовой индекс, который бы не конфликтовал с уже имеющимися в массиве
(точнее, выбирается номер, превосходящий все имеющиеся цифровые ключи в мас-
сиве). Вообще говоря, любая операция $Array[ключ]=значение всегда добавляет
элемент в конец массива, конечно, за исключением тех случаев, когда ключ уже
при-
сутствует в массиве. Если вы захотите изменить порядок следования элементов в
ас-
социативном массиве, не изменяя в то же время их ключей, это можно сделать
одним
из двух способов: воспользоваться функциями сортировки, либо же создать новый
пустой массив и заполнить его в нужном порядке, пройдясь по элементам исходного
массива.
Инструкция array()
и многомерные массивы
Вернемся к предыдущему примеру. Нам необходимо написать программу, которая по
фамилии некоторого человека из группы будет выдавать его имя. Поступим так же,
как и раньше: будем хранить данные в ассоциативном массиве (сразу отбрасывая
возможность составить ее из огромного числа конструкций if-else как неинтерес-
ную):
$Names["Ivanov"] ="Dmitry";
$Names["Petrova"]="Helen";
Теперь можно, как мы знаем, написать:
echo $Names["Petrova"]; // выведет Helen
echo $Names["Oshibkov"]; // ошибка: в массиве нет такого элемента!
Идем дальше. Прежде всего обратим внимание: приведенным выше механизмом мы
никак не смогли бы создать пустой массив. Однако он очень часто может нам пона-
добиться, например, если мы не знаем, что раньше было в массиве $Names, но
хотим
его проинициализировать указанным путем. Кроме того, каждый раз задавать массив
указанным выше образом не очень-то удобно — приходится все время однообразно
повторять строку $Names...
Так вот, существует и второй способ создания массивов, выглядящий значительно
компактнее. Я уже упоминал его несколько раз — это использование оператора
array(). Например:
// создает пустой массив $Names
$Names=array();
// создает такой же массив, как в предыдущем примере с именами
$Names=array("Ivanov"=>"Dmitry", "Petrova"=>"Helen");
// создает список с именами (нумерация 0,1,2)
$NamesList=array("Dmitry","Helen","Sergey");
Часть III. Основы языка PHP 172
Теперь займемся вопросом, как формировать двумерные (и вообще многомерные)
массивы. Это довольно просто. В самом деле, я уже говорил, что значениями пере-
менных (и значениями элементов массива тоже, поскольку PHP не делает никаких
различий между переменными и элементами массива) может быть все, что угодно, в
частности — опять же массив. Так, можно создавать ассоциативные массивы (а мож-
но — списки) с люб
|
|