базовый курс

ГРУППА КУРСА

Массивы PHP

Что такое массив

Массив - это набор данных. Каждый элемент массива, как обычная переменная, содержит какое-то значение. Это значение можно получить и можно присвоить элементу массива новое значение. Элемент массива может содержать значение любого типа, в том числе другой массив. В PHP cуществуют индексированные и ассоциативные массивы. У индексированных каждый элемент имеет номер, который называется индекс. У ассоциативного вместо индексов используются названия. Индекс или название это ключ элемента. Он применяется для обращения к конкретному элементу. В PHP нет особой разницы между индексированными и ассоциативными массивами. Работа с ними происходит практически одинаково. Можно создать массив, в котором будут и индексы и строковые ключи.

Создание массива

В PHP массивы создаются с помощью ключевого слова array. В скобках перечисляются элементы в таком виде: ключ => значение. Элементы разделяются запятыми. Пример:

+
1
2
<?php
header('Content-type: text/html; charset=utf-8');
3
4
5
6
7
$mas = array (
  0 => 'Франция',
  1 => 'Бельгия',
  2 => 'Италия'
  );

Ключи указывать не обязательно. В этом случае они будут созданы по порядку.

8
$newmas = array (5, 70, 12, 138);

Ассациативные массивы создаются таким же способом:

9
10
11
12
13
$pr = array (
  'Иванов' => 'Менеджер',
  'Петров' => 'Бухгалтер',
  'Семёнов' => 'Оператор'
  );

Есть ещё один способ создания массива. Нужно указать знчение элементу несуществующего массива.

14
$nmas[0]=23;

Вывод массива

Для вывода одного элемента массива используется конструкция echo. Она выведет значение элемента так же, как значение переменной. Но для вывода всего массива она не подходит. Если попытаться вывести с помощью неё весь массив, то просто будет указано, что это массив, но никаких данных не будет выведено. Вместо этого можно использовать функцию print_r(), которая выводит все элементы массива. Ключ указывается в квадратных скобках, затем пишется => и значение. Элементы не разделены никакими знаками, но благодаря квадратным скобкам эта запись вполне понятна и в ней легко найти нужный элемент. Выведем массив $pr на экран:

15
print_r($pr);

Изменение массива

Значение любого элемента массива можно изменить. Для этого пишется название массива, а элемент указывается в квадратных скобках. Изменим значение элемента с индексом 1 у массива $mas.

16
$mas[1]='Дания';

Если присвоить значение элементу, который не существует, то этот элемент будет добавлен в массив. При этом не обязательно соблюдать порядок у индексов. Можно создать элемент с любым индексом. Если у элемента не указать ключ, то этот элемент будет добавлен в конец массива.

17
$mas[]='Финляндия';

Функция unset() может быть использована для удаления элемента массива. Кроме того, существует функция array_pop(), которая удаляет из массива последний элемент и возвращает его значение. При обоих способах переиндексация не производится. Индексы оставшихся элементов остаются такие, какие были. Удалим элементы из массива $newmas с использованием предложенных функций:

18
19
unset($newmas[1]);
array_pop($newmas);

Функция implode() формирует одну строку, состоящую из значений массива. Между значениями вставляется разделитель.

implode (разделитель, массив)

Параметры:

разделитель - строка, которая вставляется между элементами

массив - массив, который объединяется в строку

Для примера преобразуем $mas в строку:

20
21
$str = implode(', ', $mas);
echo '<br>'.$str;

Разделителем может быть любая строка, в том числе, пробел. Разделитель можно не указывать, тогда значения элементов будут идти сразу друг за другом.

Функция explode(), делит строку по разделителю и помещает части строки в массив.

explode (разделитель, строка)

Параметры:

разделитель - набор символов, по которому делится строка. Разделитель не добавляется в элементы массива

строка - строка, которая помещается в массив

лимит - если положителен, то будет создано максимум такое количество элементов. В последний элемент помещается весь остаток строки. Если отрицателен, то в массив помещаются все части строки, кроме указанного количества последних частей строки. Необязательный параметр

Разделим созданную ранее строку:

22
23
$takemas = explode(', ', $str);
print_r($takemas);

Перебор массива

Чтобы произвести какие-то действия с каждым элементом массива используется цикл. Чтобы определить количество итераций нужно получить длину массива. Для этого используется функция count(), которая возвращает количество элементов. Для примера выведем каждый элемент массива $mas:

24
25
26
27
28
$num=count($mas);
for ($i=0; $i<$num; $i++)
  {
  echo '<br>'.$i.' - '.$mas[$i];
  }

Не желательно использовать фунцию count() внутри цикла. В этом случае она будет выполняться на каждой итерации. Лучше записать результат её работы в переменную и использовать эту переменную в цикле.

Такой цикл можно использовать для массивов, в которых все индексы элементов идут подряд. Если каких-то элементов нет, то этот цикл ипользовать неудобно. Кроме того, он не подходит для ассоциативных массивов. Для них есть конструкция foreach, которая производит перебор всех элементов массива.

29
30
31
32
foreach ($pr as $key => $value)
  {
  echo '<br>'.$key.' - '.$value;
  }

Первая переменная в скобках - это массив, по которому производится цикл. На каждой итерации цикла во вторую переменную записывается ключ элемента а в третью - значение элемента. В цикле происходит столько итераций, сколько элементов содержит массив.

Приведённый в примере цикл выводит элементы массива $pr на страницу.

Двухмерные массивы

Ранее мы рассматривали только одномерные массивы, но они могут иметь и больше измерений. Они могут быть двухмерные, трёхмерные, четырёхменрые и так далее. Если одномерный массив можно представить в виде строки, то двухмерный - это страница, состоящая из нескольких строк. Также двухмерный массив можно представить в виде таблицы, в которой есть строки, а в каждой строке есть ячейки. Каждый элемент в таком массиве имеет два индекса - индекс первого измерения и второго измерения. Эти индексы можно сравнить с номером строки и номером символа в строке. В коде программы каждый индекс пишется в квадратных скобках. Пример:

33
34
35
36
37
38
$dimens[0][0]=30;
$dimens[0][1]=5;
$dimens[1][0]=10;
$dimens[1][1]=55;
echo '<br>';
print_r($dimens);

Многомерные массивы бывают не только индексированные, но и ассоциативные.

Функции для работы с масссивами

В PHP есть много функций для работы с массивами. Функции, которые используются наиболее часто, приведены в следующей таблице:

Функция Значение
array_search(n, $ar) Находит первое значение, n в массиве $ar и возвращает ключ элемента, в котором содержится это значение. Если значение не найдено, функция возвращает false
array_keys($ar, n) Возвращает все ключи массива $ar. Если указать параметр n, то функция возвращает ключи только тех элементов, которые содержат такое значение
array_values($ar) Возвращает индексированный массив, содержащий все значения массива $ar
array_count_values($ar) Подсчитывает, сколько раз повторяется каждое значение в массиве $ar
array_unique($ar, сортировка) Удаляет из массива $ar элементы с повторяющимися значениями. Все значения получаются уникальными. Функция возвращает новый массив, а сам $ar отсаётся неизменным. Сортировка определяет, как сравниваются значения. Необязательный параметр. Принимает значения: SORT_STRING - как строки (по умолчанию), SORT_LOCALE_STRING - как строки с учётом локали, SORT_NUMERIC - как числа, SORT_REGULAR - типы значений не меняются
array_fill(старт, количетсво, n) Возвращает индексированный массив, в котором все элементы имеют значение n. Параметр старт - это индекс первого элемента, а параметр количество - это количество элементов
array_pad($ar, f, n) Увеличивает размер массива $ar до размера f и заполняет новые элементы значением n. Если параметр f получает отрицательное значение, то элементы добавляются с начала массива. Функция возвращает новый массив, а сам $ar отсаётся неизменным.

array_reverse($ar) Возвращает копию массива $ar, в которой индексы элементов переставлены в обратном порядке. Если есть строковые ключи, то они не меняются.