Синтаксис php (811590), страница 4
Текст из файла (страница 4)
Вот пример:<?php// Простой способ инициализации массива, без указания индексов$names[]="Апельсин";$names[]="Банан";$names[]="Груша";$names[]="Помидор";// PHP автоматически присвоит индексы элементам массива, начиная с 0// Выводим элементы массивов в браузер:echo $names[0]; // Вывод элемента массива names с индексом 0echo "<br>";echo $names[3]; // Вывод элемента массива names с индексом 3// Выводит:// Апельсин// Помидор?>В рассмотренном примере вы можете добавлять элементы массива names простымспособом, то есть не указывая индекс элемента массива:$names[]="Яблоко";Новый элемент простого массива (списка) будет добавлен в конец массива. Вдальнейшем, с каждым новым элементом массива, индекс будет увеличиваться наединицу.Простые многомерные массивыОбобщенный синтаксис элементов многомерного простого массива:$имя[индекс1][индекс2]..[индексN];Пример простого многомерного массива:<?php// Многомерный простой массив:$arr[0][0]="Овощи";$arr[0][1]="Фрукты";$arr[1][0]="Абрикос";$arr[1][1]="Апельсин";$arr[1][2]="Банан";$arr[2][0]="Огурец";$arr[2][1]="Помидор";$arr[2][2]="Тыква";// Выводим элементы массива:echo "<h3>".$arr[0][0].":</h3>";for ($q=0; $q<=2; $q++) {echo $arr[2][$q]."<br>";}echo "<h3>".$arr[0][1].":</h3>";for ($w=0; $w<=2; $w++) {echo $arr[1][$w]."<br>";}?>Ассоциативные массивы в PHPВ PHP индексом массива может быть не только число, но и строка.
Причем на такуюстроку не накладываются никакие ограничения: она может содержать пробелы, длинатакой строки может быть любой.Ассоциативные массивы особенно удобны в ситуациях, когда элементы массива удобнеесвязывать со словами, а не с числами.Итак, массивы, индексами которых являются строки, называются ассоциативнымимассивами.Одномерные ассоциативные массивыОдномерные ассоциативные массивы содержат только один ключ (элемент),соответствующий конкретному индексу ассоциативного массива. Приведем пример:<?php// Ассоциативный массив$names["Иванов"]="Иван";$names["Сидоров"]="Николай";$names["Петров"]=" р";// В данном примере: фамилии - ключи ассоциативного массива// , а имена - элементы массива names?>Доступ к элементам одномерных ассоциативных массивов осуществляется так же, как и кэлементам обыкновенных массивов, и называется доступом по ключу:echo $names["Иванов"];Многомерные ассоциативные массивыМногомерные ассоциативные массивы могут содержать несколько ключей,соответствующих конкретному индексу ассоциативного массива.
Рассмотрим примермногомерного ассоциативного массива:<?php// Многомерный массив$A["Ivanov"] = array("name"=>"Иванов И.И.", "age"=>"25", "email"=>"ivanov@mail.ru");$A["Petrov"] = array("name"=>"Петров П.П.", "age"=>"34", "email"=>"petrov@mail.ru");$A["Sidorov"] = array("name"=>"Сидоров С.С.", "age"=>"47", "email"=>"sidorov@mail.ru");?>Многомерные массивы похожи на записи в языке Pascal или структуры в языке C.Доступ к элементам многомерного ассоциативного массива осуществляется следующимобразом:echo $A["Ivanov"]["name"]; // Выводит Иванов И.И.echo $A["Petrov"]["email"]; // Выводит petrov@mail.ruКак вы уже заметили, для создания многомерного ассоциативного массива мыиспользовали специальную функцию array, мы ее рассмотрим позже, когда будемрассматривать операции над массивами.Ассоциативные многомерные массивы можно создавать и классическим способом, хотяэто не так удобно:<?php// Многомерный ассоциативный массив$A["Ivanov"]["name"]="Иванов И.И.";$A["Ivanov"]["age"]="25";$A["Ivanov"]["email"]="ivanov@mail.ru";$A["Petrov"]["name"]="Петров П.П.";$A["Petrov"]["age"]="34";$A["Petrov"]["email"]="petrov@mail.ru";$A["Sidorov"]["name"]="Сидоров С.С.";$A["Sidorov"]["age"]="47";$A["Sidorov"]["email"]="sidorov@mail.ru";// Получаем доступ к ключам многомерного ассоциативного массиваecho $A["Ivanov"]["name"]."<br>"; // Выводит Иванов И.И.echo $A["Sidorov"]["age"]."<br>"; // Выводит 47echo $A["Petrov"]["email"]."<br>"; // Выводит petrov@mail.ru?>Функции для работы с массивами и операции надмассивамиФункции для работы с массивамиРассмотрим некоторые часто используемые функции для работы с массивами.Функция list()Предположим, у нас есть массив, состоящий из трех элементов:$names[0]="Александр";$names[1]="Николай";$names[2]="Яков";Допустим, в какой-то момент нам нужно передать значения всех трех элементов массива,соответственно трем переменным: $alex, $nick, $yakov.
Это можно сделать так:$alex = $names[0];$nick = $names[1];$yakov = $names[2];Если массив большой, то такой способ присвоения элементов массива переменным неочень удобен.Есть более рациональный подход - использование функции list():list ($alex, $nick, $yakov) = $names;Если нам нужны только "Николай" и "Яков", то мы можем сделать так:list (, $nick, $yakov) = $names;Функция array()Функция Array() используется специально для создания массивов. При этом онапозволяет создавать пустые массивы.
Вот методы использования функции Array():<?php// Создает пустой массив:$arr = array();// Создает список с тремя элементами. Индексы начинаются с нуля:$arr2 = array("Иванов","Петров","Сидоров");// Создает ассоциативный массив с тремя элементами:$arr3 = array("Иванов"=>"Иван", "Петров"=>"Петр", "Сидоров"=>"Сидор");// Создает многомерный ассоциативный массив:$arr4 = array("name"=>"Иванов", "age"=>"24", "email"=>"ivanov@mail.ru");$arr4 = array("name"=>"Петров", "age"=>"34", "email"=>"petrov@mail.ru");$arr4 = array("name"=>"Сидоров", "age"=>"47", "email"=>"sidorov@mail.ru");?>Операции над массивамиСортировка массивовНачнем с самого простого — сортировки массивов.
В PHP для этого существует оченьмного функций. С их помощью можно сортировать ассоциативные массивы и списки впорядке возрастания или убывания, а также в том порядке, в каком вам необходимо —посредством пользовательской функции сортировки.Сортировка массива по значениям c помощью функций asort() и arsort():Функция asort() сортирует массив, указанный в ее параметре, так, чтобы его значения шлив алфавитном (если это строки) или в возрастающем (для чисел) порядке.При этом сохраняются связи между ключами и соответствующими им значениями, т.
е.некоторые пары ключ=>значение просто "всплывают" наверх, а некоторые — наоборот,"опускаются". Например:$A=array("a"=>"Zero","b"=>"Weapon","c"=>"Alpha","d"=>"Processor");asort($A);foreach($A as $k=>$v) echo "$k=>$v ";// выводит "c=>Alpha d=>Processor b=>Weapon a=>Zero"// как видим, поменялся только порядок пар ключ=>значениеФункция arsort() выполняет то же самое, за одним исключением: она упорядочиваетмассив не по возрастанию, а по убыванию.Сортировка по ключам с помощью функций ksort() и krsort():Функция ksort() практически идентична функции asort(), с тем различием, что сортировкаосуществляется не по значениями, а по ключам (в порядке возрастания).Например:$A=array("d"=>"Zero", "c"=>"Weapon", "b"=>"Alpha", "a"=>"Processor");ksort($A);for(Reset($A); list($k,$v)=each($A);) echo "$k=>$v ";// выводит "a=>Processor b=>Alpha c=>Weapon d=>Zero"Функция для сортировки по ключам в обратном порядке называется krsort() иприменяется точно в таком же контексте, что и ksort().Сортировка по ключам при помощи функции uksort():Довольно часто нам приходится сортировать что-то по более сложному критерию, чемпросто по алфавиту.
Например, пусть в $Files хранится список имен файлов иподкаталогов в текущем каталоге. Возможно, мы захотим вывести этот список не только влексикографическом порядке, но также и чтобы все каталоги предшествовали файлам. Вэтом случае нам стоит воспользоваться функцией uksort(), написав предварительнофункцию сравнения с двумя параметрами, как того требует uksort().<?php// Эта функция должна сравнивать значения $f1 и $f2 и возвращать:// -1, если $f1<$f2,// 0, если $f1==$f2// 1, если $f1>$f2// Под < и > понимается следование этих имен в выводимом спискеfunction FCmp($f1,$f2){ // Каталог всегда предшествует файлуif(is_dir($f1) && !is_dir($f2)) return -1;// Файл всегда идет после каталогаif(!is_dir($f1) && is_dir($f2)) return 1;// Иначе сравниваем лексикографическиif($f1<$f2) return -1; elseif($f1>$f2) return 1; else return 0;}// Пусть $Files содержит массив с ключами — именами файлов// в текущем каталоге.
Отсортируем его.uksort($Files,"FCmp"); // передаем функцию сортировки "по ссылке"?>Конечно, связи между ключами и значениями функцией uksort() сохраняются, т. е., опятьже, некоторые пары просто "всплывают" наверх, а другие — "оседают".Сортировка по значениям при помощи функции uasort()Функция uasort() очень похожа на uksort(), с той разницей, что сменной(пользовательской) функции сортировки "подсовываются" не ключи, а очередныезначения из массива. При этом также сохраняются связи в парах ключ=>значение.Переворачивание массива с помощью функции array_reverce()Функция array_reverse() возвращает массив, элементы которого следуют в обратномпорядке относительно массива, переданного в параметре.
При этом связи между ключамии значениями, конечно, не теряются. Например, вместо того, чтобы ранжировать массив вобратном порядке при помощи arsort(), мы можем отсортировать его в прямом порядке, азатем перевернуть:$A=array("a"=>"Zero","b"=>"Weapon","c"=>"Alpha","d"=>"Processor");asort($A);$A=array_reverse($A);Конечно, указанная последовательность работает дольше, чем один-единственный вызовarsort().Сортировка списка при помощи функций sort() и rsort()Эти две функции предназначены в первую очередь для сортировки списков.Функция sort() сортирует список (разумеется, по значениям) в порядке возрастания, аrsort() — в порядке убывания.