
- •Лабораторная работа № 8 Массивы и списки в php.
- •1.1Массивы и списки.
- •1.1.1Понятие массива
- •1.1.2Понятие списка
- •1.2 Ассоциативные массивы
- •1.3 Инструкции list()
- •1.4 Инструкция array() и создание многомерных массивов
- •1.6Перебор массива
- •1.6.1Косвенный перебор
- •1.6.2Прямой перебор
- •1.6.3Недостатки косвенного перебора
- •1.7 Сортировка массивов
- •1.7.1Сортировка массивов по ключам. Функции ksort() и krsort()
- •1.7.2Сортировка списка
- •1.7.3Переворачивание массива.
- •1.7.4Перемешивание списков.
- •1.7.5Пользовательская сортировка массивов
- •1.8Получение части массива
- •1.9Добавление и удаление элементов массива
- •1.9.1Добавление в конец массива
- •1.9.2Удаление последнего элемента списка
- •1.9.3Добавление в начало списка. Удаление первого элемента списка
- •1.9.4Функция array_unique()
- •1.10Переменные и массивы. Взаимные переходы
- •1.10.1 Упаковка переменных в массив. Функция compact()
- •1.10.2 Разупаковка (извлечение) переменных из массива.
- •1.11Создание диапазона чисел
- •1.12Небольшой практический пример
- •1.13Задание
1.2 Ассоциативные массивы
Мы договорились, что массивы, индексами которых являются числа, начинающиеся с нуля, будем называть списками. Однако в PHP индексом массива может быть и строка. Причем на эту строку не накладывается никаких ограничений: она может содержать пробелы, специальные символы, также нет ограничений на длину строки. Массивы, индексами которых являются строки, называются ассоциативными. Индексы ассоциативных массивов называются ключами. Пример ассоциативного массива:
$Реор1е["Иванов"] = "Иван";
$Реор1е["Сидоров"] = "Николай";
$Реор1е["Петров" ] = "Петр";
Доступ к элементам ассоциативных массивов осуществляется так же, как и к элементам обыкновенных массивов, и называется доступом по ключу:
echo $People["Иванов"];
1.3 Инструкции list()
Предположим, что у нас есть массив, состоящий из трех элементов:
$Реор1е[0] = "Иван";
$Реор1е[1] = "Николай";
$Реор1е[2] = "Петр";
Теперь допустим, что в какой-то момент нам необходимо передать значения всех трех элементов массива, соответственно, трем переменным $lvanov, $Sidorov, $Petrov, в которые мы хотим записать имена Иванова, Сидорова и Петрова. Это можно сделать так:
$Ivanov = $People[0];
$Sidorov = $People[l];
$Petrov = $People[2];
Согласитесь, что если массив большой, то такой подход не очень удобен. Существует более рациональное решение — использовать инструкцию Iist(), которая специально для этого предназначена: list($Ivanov,$Sidorov,$Petrov) = $People; Если же нам нужны имена только Сидорова и Петрова, первый параметр можно пропустить:
list(, $Sidorov,$Petrov) = $People;
1.4 Инструкция array() и создание многомерных массивов
Инструкция аггау() используется специально для создания массивов. При этом она позволяет создавать пустые массивы, чего никак нельзя сделать рассмотренными ранее механизмами. Методы использования инструкции аггау() рассмотрим на следующих примерах:
$А = аггау(); // создает пустой массив
$А = array("Иванов"=>"Иван","Петров"=>"Петр"); // создает ассоциативный массив с двумя элементами
$А = array("Иванов","Петров"); // создает список с двумя элементами.
Индексы нумеруются с нуля. Инструкцию аггау() удобно использовать для создания многомерных массивов. Предположим, что мы хотим создать массив, элементами которого будут ассоциативные массивы с ключами name, sex и email.
Создать такой массив можно с помощью следующих операторов:
$A["Ivanov"] = array ("name"=>"Иванов И.", "sex" = >"M", "email"
=> "ivanov@mail.ru");
$А["Petrov"] = array ("name"=>"Петров И.", "sex"=>"M", "email"
=> "petrov@mail.ru");
$A["Sidorova"] = array ( "name" = >"Сидорова . H", "sex"=>"F",
"email" => "sidorova@mail.ru");
Это же самое можно записать в следующем виде:
$А = array (
"Ivanov" = array("name"=>"Иванов И.", "sex"=>"M", "email" =>
"ivanov@mail.ru") ,
"Petrov" = array("name"=>"Петров И.", "sex"=>"M", "email" =>
"petrov@mail.ru") ,
"Sidorova" = array ("name"=>"Сидорова. H", "sex"=>"F", "email"
=> "sidorova@mail.ru")
) ; '
Добраться до элементов массива можно так:
echo $A["Ivanov"]["name"]; // выведет Иванов И.
echo $A["Ivanov"]["email"]; // выведет ivanov@ivanov.org
Многомерные массивы в PHP больше похожи на записи (record) в языке Pascal или структуры в языке С, чем на многомерные массивы в обычном понимании.
1.5Операции над массивами
Мы уже познакомились с основной операцией над массивами — доступ по ключу. Сейчас мы рассмотрим три операции с массивами:
Удаление.
Слияние.
Перебор.
1.5.1Удаление массивов
Для удаления массива, как и любой другой переменной, используется функция UnSet():
UnSet ($People);
Обычно удаление может потребоваться для очень большого массива, чтобы освободить используемую им память.
1.5.2Слияние массивов
1.5.3Стандартное слияние
Слияние (конкатенация) — это операция создания массива, состояшего из элементов нескольких других массивов. Слияние массивов — это очень опасная операция, поэтому старайтесь избегать ее. Результат слияния подчиняется своей логике, забыв о которой можно потерять данные Слияние реализуется при помощи оператора +.
Итак, пусть у нас есть два массива:
$А = array ("1"=>"первый","2"=>"второй") ;
$В = array ("3"=>"третий","4"=>"четвертый");
Теперь, давайте сольем эти два массива в один массив $С:
$С = $А + $В;
Сразу нужно сказать, что оператор «+» для массивов не коммутативен, а это значит, что $А + $В не равно $В + $А. В результате слияния $А + $В мы получим:
"1"=>"первый" , "2"=>"второй","3"=>"третий","4"=>"четвертый"
// именно в таком порядке
А в результате $В + $А, получим такой массив:
"3"=>"третий" , "4"=>"четвертый","1"=>"первый","2"=>"второй"
Особенно внимательным нужно быть при слиянии списков. Предположим, у нас опять есть два массива:
$А = array(10, 11,12) ; $В = array(15,17,18) ;
В результате слияния $С = $А + $В мы получим следующий массив:
10,11,12
Неожиданный результат неправда ли. Скорее всего вы ожидали получить массив array (10, 11, 12, 15, 17, 18). Однако в PHP на этот счет свои правила. При слиянии массивов, в которых содержатся элементы с одинаковыми индексами (ключами), в результирующем массиве останется элемент первого массива, причем на том же самом месте. А в приведенном примере элементы массива $А имели индексы 1, 2, 3 и элементы массива $в имели индексы 1, 2, 3. А поскольку массив $А при сложении стоит первым, то его элементы и являются результирующими. Можете убедиться в этом еще раз следующим образом:
$А = array(10,11,12);
SB = array(15,17,18);
$А = $А + $В; // или
$А += $В;
В этом примере элементы массива $А не изменятся. Изменить элементы массива можно только при помощи прямого перебора (см. следующий раздел).
Слияние с помощью функции array_merge() Функция array_merge() предназначена для слияния двух массивов. Причем при слиянии массивов эта функция устраняет все недостатки оператора +. Она соединяет массивы, переданные ей в качестве аргументов, в один большой массив. Если в соединяемых массивах встречаются одинаковые ключи (ключ=>значение), то в результирующий массив помещается пара ключ=>значение из массива, который стоит правее в списке аргументов функции array_merge(). Однако это правило не затрагивает списки, то есть массивы с числовыми индексами. В этом случае элементы с повторяющимся числовым индексом помещаются в конец результирующего массива в любом случае.
Проиллюстрируем сказанное примером:
$А = array(10,11,12);
$В = array(15,17,18);
$С = $А + $В; // $С = аггау(10,11,12),
$С = array_merge($A,$B); // $С = array(10,11,12,15,17,18);
Таким образом, функцию array_merge() очень удобно использовать для слияния списков.