Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IT_Laboratornaya_rabota_8_rnr.doc
Скачиваний:
0
Добавлен:
02.01.2020
Размер:
145.41 Кб
Скачать

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() очень удобно использовать для слияния списков.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]