|
м числом измерений. Например, если кроме имени о человеке
известен также его возраст, то можно инициировать массив $Names так:
$Names["Ivanov"] = array("name"=>"Dmitry","age"=>25);
$Names["Petrova"] = array("name"=>"Helen", "age"=>23);
или даже так:
$Names=array(
"Ivanov" => array("name"=>"Dmitry","age"=>25),
"Petrova"=> array("name"=>"Helen", "age"=>23)
);
Как же добраться до нужного нам элемента в нашем массиве? Нетрудно догадаться
по аналогии с другими языками:
echo $Names["Ivanov"]["age"]; // напечатает "25"
echo $Names["Petrova"]["bad"]; // ошибка: нет такого элемента "bad"
Довольно несложно, не правда ли? Кстати, мы можем видеть, что ассоциативные
массивы в PHP удобно использовать как некие структуры, хранящие данные. Это по-
хоже на конструкцию struct в Си (или record в Паскале). Пожалуй, это единст-
венный возможный способ организации структур, но он очень гибок.
Операции над массивами
Существует довольно много операций, которые можно выполнять с массивами (в до-
полнение к общим операциям над переменными). Давайте перечислим их, а заодно и
подытожим все сказанное выше.
Доступ по ключу
Как мы уже знаем, ассоциативные массивы — объекты, которые наиболее приспо-
соблены для выборки из них данных путем указания нужного ключа. В PHP и для
всех массивов, и для списков (которые, еще раз напомню, также являются массива-
ми) используется один и тот же синтаксис, что является очень большим достоинст-
вом. Вот как это выглядит:
echo $Arr["anykey"]; // выводит элемент массива $Arr с ключом anykey
echo $Arr["first"]["second"]; // так используются двумерные массивы
echo (SomeFuncThatReturnsArray())[5]; // ОШИБКА! Так нельзя!
Глава 10. Ассоциативные массивы 173
// Вот так правильно:
$Arr= SomeFuncThatReturnsArray();
echo $Arr[5];
Последний пример показывает, что PHP сильно отличается от Си с точки зрения ра-
боты с массивами: в нем нет такого понятия, как "контекст массива", а значит,
мы не
можем применить [] непосредственно к значению, возвращенному функцией.
Величина $Arr[ключ] является полноценным "левым значением", т. е. может стоять
в левой части оператора присваивания, от нее можно брать ссылку с помощью
опера-
тора &, и т. д. Например:
$Arr["anykey"]=array(100,200); // присваиваем элементу массива 100
$ref=&$Arr["first"]["second"]; // $ref — синоним элемента массива
$Arr[]="for add"; // добавляем новый элемент
Функция count()
Мы можем определить размер (число элементов) в массиве при помощи стандартной
функции count():
$num=count($Names); // теперь в $num — число элементов в массиве
Сразу отмечу, что count() работает не только с массивами, но и с объектами и
даже
с обычными переменными (для последних count() всегда равен 1, как будто пере-
менная — это массив с одним элементом). Впрочем, ее очень редко применяют для
чего-либо, отличного от массива — разве что по-ошибке.
Слияние массивов
Еще одна фундаментальная операция — слияние массивов, т. е. создание массива,
содержащего как элементы одного, так и другого массива. Реализуется это при
помо-
щи оператора +. Например:
$a=array("a"=>"aa", "b"=>"bb");
$b=array("c"=>"cc", "d"=>"dd");
$c=$a+$b;
В результате в $c окажется ассоциативный массив, содержащий все 4 элемента, а
именно: array("a"=>"aa", "b"=>"bb", "c"=>"cc", "d"=>"dd"), причем
именно в указанном порядке. Если бы мы написали $c=$b+$a, результат бы был не-
много другой, а именно: array("c"=>"cc", "d"=>"dd", "a"=>"aa",
"b"=>"bb"), т. е. элементы расположены в другом порядке. Видите, как
проявляется
направленность массивов? Она заставляет оператор + стать некоммутативным, т. е.
$a+
|
|