базовый курс

ГРУППА КУРСА

Массивы 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, 11, 138);

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

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

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

14
$nmas[0] = 23;

Вы можете создать пустой массив и только потом наполнять его. Это можно делать любым способом: и через ключевое слово array, и с помощью квадратных скобок.

15
$emp=[];

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

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

16
print_r($pr);

Обращение к элементам массива

Чтобы получить или изменить значение определённого элемента массива, нужно к нему обратиться. Для обращения к элементу пишется имя массива, а затем в квадратных скобках указывается конкретный элемент. Пример:

17
echo $mas[0];

Обращение к ассоциативному массиву делается так же. Только ключ элемента - это строка, и она пишется в кавычках.

18
echo $pr['Семёнов'];

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

Значение любого элемента массива можно изменить.

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

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

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

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

22
23
unset($new_mas[1]);
array_pop($new_mas);

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

24
25
if (isset($new_mas[1]))
unset($new_mas[1]);

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

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

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

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

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

33
34
35
36
foreach ($pr as $key => $value)
  {
  echo '<br>'.$key.' - '.$value;
  }

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

С помощю переменной $value можно только получить значение элемента массива. Изменить значение не получится. Ведь в переменную просто копируется значение элемена. Чтобы изменить элемент, нужно использовать ключ и обращаться к массиву. Пример:

38
39
40
41
foreach ($new_mas as $key => $value)
  {
  $new_mas[$key] += 1;
  }

Если вы не изменяете значания элементов, и ключи элементов не используются, то переменную $key в конструкции foreach можно не указывать.

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

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