базовый курс

ГРУППА КУРСА

Массивы 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
$new_mas = array (5, 70, 12, 138);

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

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

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

14
$nmas[0]=23;

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

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

15
print_r($pr);

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

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

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

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

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

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

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

Функцию unset() можно применить только к существующему элементу, иначе будет ошибка. Если неизвестно, есть ли элемент, то можно проверить его существование.

21
22
if (isset($newmas[1]))
unset($newmas[1]);

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

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

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

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

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

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

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

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

Массив в строку

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

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

Параметры:

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

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

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

35
36
$str = implode(', ', $mas);
echo '<br>'.$str;

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

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

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

Параметры:

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

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

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

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

38
39
$take_mas = explode(', ', $str);
print_r($take_mas);

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

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

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, в которой индексы элементов переставлены в обратном порядке. Если есть строковые ключи, то они не меняются.