Вы находитесь на странице: 1из 7

Лекции курса PHP7 + MySQL с нуля

(краткое содержание)

ЛЕКЦИЯ 32. СТАНДАРТНЫЕ ФУНКЦИИ. МАССИВЫ. ОПЕРАЦИИ С


МАССИВАМИ.

Ключи и значения
В этой части урок мы рассмотрим функции, которые позволяют оперировать
частями элементов массивов.
array array_flip(array $array)
Эта функция меняет местами ключи и элементы массива. В результате ее
работы образуется новый массив.
Листинг 32.1. Функция array_flip()

//Создаем ассоциативный массив


$array = [
'KEY1' => 'VALUE1',
'KEY2' => 'VALUE2',
'KEY3' => 'VALUE3',
'KEY4' => 'VALUE4'
];

//Выводим на экран первоначальный вид массива


echo "<b>Первоначальный массив:</b>";
foreach($array as $k => $v)
echo "<p>[{$k}] => $v</p>";

//Используем функцию array_flip()


$array = array_flip($array);
echo "<b>Новый массив:</b>";
foreach($array as $k => $v)
echo "<p>[{$k}] => $v</p>";

Из результатов работы скрипта Вы увидите, что ключи массива array


поменялись со значениями после работы функции array_flip().

Функции возврата частей элементов и поиска по массиву


Если Вам необходимо выделить из ассоциативного массива только части из
пар ключ => значение, то могут пригодиться функции:
list array_keys(array $array [, mixed $searchVal])
list array_values(array $array),
возвращающие, соответственно, ключи или значения в виде массивов-
списков.
В функции array_keys() дополнительный параметр $searchVal задает поиск и
возврат только тех ключей, которым соответствует заданное значение.
Порой, при проверке массива, необходимо убедиться в наличии в нем
определенного элемента с заданным значением. Для этой операции пригодится
функция
bool in_array(mixed $val, array $array),
возвращающая логическое значение true, в случае, если элемент найден.
Рассмотрим действие вышеперечисленных функций в листинге 32.2.

1
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

Листинг 32.2. Функции array_keys(), array_values(), in_array()

//Создаем ассоциативный массив


$array = [
'A' => 'Alpha',
'B' => 'Bravo',
'C' => 'Charlie',
'D' => 'Delta'
];

//Создаем два новых массива-списка, которые будут содержать только ключи и


только значения
$key_array = array_keys($array);
$value_array = array_values($array);

//Выводим на экран новые массивы


echo "<b>Массив-список, содержащий ключи ассоциативного массива:</b>";
foreach($key_array as $v)
echo "<p>{$v};</p>";

echo "<b>Массив-список, содержащий значения ассоциативного массива:</b>";


foreach($value_array as $v)
echo "<p>{$v};</p>";

//С помощью функции in_array() проверяем наличие элемента со значением Charlie


echo "<b>Проверяем наличие в массиве array элемента со значением Charlie</b>";
if(in_array('Charlie', $array))
echo "<p>Да, в массиве присутствует такой элемент!</p>";
else
echo "<p>В массиве такого элемента нет!</p>";

Слияние массивов.
В уроке 22 Вы изучали способы объединения массивов в один, а также
особенности таких операций.
С целью облегчить мучения разработчиков с данным вопросом, в PHP была
включена функция array_merge(), позволяющая объединять массивы в один:
array array_merge(array $array_1, array $array_2, …, array $array_N)
Суть ее работы в создании нового массива, в котором элементы
располагаются последовательно из каждого массива, указанного в параметрах
функции. В случаях, если в объединяемых массивах попадаются элементы с
одинаковыми ключами, в новый массив помещается тот элемент, который
относится к массиву, расположенному правее в параметрах функции. Рассмотрим,
как это происходит, в листинге 32.3.
Листинг 32.3. Слияние массивов функцией array_merge()

//Создаем ассоциативные массивы для слияния


$first_array = [

2
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

'Key1' => 'value1',


'Key2' => 'value2',
'Key3' => 'value3'
];

$second_array = [
'Key4' => 'value4',
'Key5' => 'value5'
];

$third_array = [
'Key2' => 'valueN2',
'Key6' => 'value6',
'Key3' => 'valueN3'
];

//Объединяем массивы функцией array_merge()


$new_array = array_merge($first_array, $second_array, $third_array);

//Выводим новый массив на экран


echo "<b>Объединенный массив:</b>";
foreach($new_array as $k => $v)
echo "<p> [{$k}] => {$v};</p>";

Как видите, элементы массива first_array с ключами Key2 и Key3 при слиянии
были перекрыты элементами с такими же ключами из массива third_array.

Выделение подмассивов
В PHP для работы с массивами есть функции, очень похожие на функцию
substr() для работы со строками. Такие функции позволяют выделить из массива
заданный подмассив:
А) array array_slice(array $arr, int $offset [, int $length = null, bool $pr_keys = false])
Эта функция возвращает часть массива $arr с заданной длиной $length,
начиная с элемента $offset. Параметр $pr_keys в значении true сохраняет значения
ключей выделенного подмассива. Если параметр $length не задан, то проход
производится до конца массива.
В целом, параметры $offset и $length очень напоминают параметры $start и
$length функции substr() и также могут принимать как положительные, так и
отрицательные значения.
Б) array array_splice(array $arr, int $offset [, int $length, int $repl])
Данная функция работает похожим на array_slice() образом, но параллельно
выделению заданного подмассива элементов, она может заменить его на
подмассив $repl. Если $repl не указан, то выделенный подмассив удаляется из
исходного массива.
Рассмотрим принцип действия этих функций в листинге 32.4
Листинг 32.4. Функции array_slice() и array_splice()

//Создаем ассоциативный массив

3
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

$array = [
'KeyA' => 'ValueA',
'KeyB' => 'ValueB',
'KeyC' => 'ValueC',
'KeyD' => 'ValueD',
'KeyE' => 'ValueE',
'KeyF' => 'ValueF'
];

//Выделяем из него ассоциативный массив длиной 3 элемента и начинающийся с 3-


его элемента
$slice_arr = array_slice($array, 2, 3, true);

//Выводим полученный массив на экран


echo "<b>Подмассив из массива array:</b>";
foreach($slice_arr as $k => $v)
echo "<p> [{$k}] => {$v};</p>";

//Создаем ассоциативный массив из трех элементов, который заменит в массиве


элементы, выделенные функцией array_slice()
$sub_array = [
'KeyG' => 'ValueG',
'KeyH' => 'ValueH',
'KeyI' => 'ValueI'
];

//Запускаем функцию array_splice()


array_splice($array, 2, 3, $sub_array);

//Выводим измененный массив array


echo "<b>Измененный массив array:</b>";
foreach($array as $k => $v)
echo "<p> [{$k}] => {$v};</p>";

Особенностью функции array_splice() является то, что она не сохраняет


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

Добавление и удаление элементов в массивах


Помимо рассмотренных нами ранее способов добавления элементов в
массив, существует еще 4 функции, позволяющих добавлять и удалять элементы
из начала и конца массива с соответствующим смещением оставшихся элементов:
int array_push(list &$array, mixed $var1 [, mixed $var2, …, mixed $varN]) – добавляет
переменные $var1, $var2, …, $varN в конец массива-списка $array.
mixed array_pop(list $array) – возвращает последний элемент массива, удаляя
его со своего местоположения.
int array_unshift(list &$array, mixed $var1 [, mixed $var2, …, mixed $varN]) – работает
аналогично array_push(), но добавляет элементы в начало массива, сдвигая другие

4
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

элементы на количество добавляемых. Ключи имеющихся элементов изменяются


в соответствии с новым местоположением.
mixed array_shift(list &$array) – возвращает первый элемент массива $array и
удаляет его из самого массива. Все другие элементы смещаются с изменением
индексов массива.
Листинг 32.5. Работа функций array_push(), array_pop(), array_unshift(),
array_shift().

//Создаем массив-список
$array = ['Чемодан', 'Саквояж', 'Ридикюль', 'Рюкзак', 'Ранец'];

//Работа функций array_pop() И array_shift()


$first_el = array_shift($array);
$last_el = array_pop($array);

//Добавим новые элементы в массив array с помощью функций array_push() и


array_unshift()
array_push($array, 'Сумка', 'Мешок');
array_unshift($array, 'Дипломат', 'Портмоне');

//Теперь выведем на экран новый массив и выделенные первый и последний


элемент первоначального массива
echo "<p><b>Первый элемент первоначального массива:</b> {$first_el};</p>";
echo "<p><b>Последний элемент первоначального массива:</b> {$last_el};</p>";
echo "<b>Новый массив:</b>";
foreach($array as $k => $v)
echo "<p>[{$k}] => {$v};</p>";

Создание диапазона чисел


Одна из самых простых функций для работы с массивами – range():
int range(int $low, int $high)
Создает массив-список чисел в диапазоне от $low до $high.
Листинг 32.6. Функция range()

$array = range(100, 117);


echo "<b>Массив-список значений в диапазон от 100 до 117</b><p>";
foreach($array as $v)
echo "{$v}; ";
echo "</p>";

Множества чисел
Массивы-списки могут использоваться в PHP, как множества элементов.
Соответственно, для них возможно выполнение теоретико-множественных
операций, таких как объединение, пересечение, разность.
Для каждой из этих операций в наборе стандартных функций предусмотрена
соответствующая:

5
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

- array array_intersect(array $array_1, list $array_2 [, list $array_3, …, list $array_N]) –


операция пересечения;
- array array_diff(array $array_1, list $array_2 [, list $array_3, …, list $array_N]) –
операция разности.
Функция array_intersect() возвращает массив элементов, которые встречаются
во всех массивах, указанных в параметрах функции.
Функция array_diff() возвращает массив элементов, находящихся в массиве
$array_1, которые не встречаются ни в одном из массивов $array_2, $array_3, …,
$array_N.
Для проведения операции объединения необходимо запустить комплекс
функций:
- для каждого из объединяемых массивов запустить функцию array
array_unique(array $array), которая создает новый массив, содержащий только
уникальные пары ключ => значение (сохраняется только первая встреченная пара из
дублируемых);
- объединить все массивы с помощью функции array_merge(), рассмотренной
ранее в этом уроке.
Рассмотрим работу этих функций на примере листинга 32.7.
Листинг 32.7. Функции array_intersect(), array_diff(), array_unique() +
array_merge()

//Создадим три массива-списка (для операций пересечения и разности) и два


ассоциативных массива (для операции объединения).
$array_1 = ['Mercedes', 'BMW', 'VW', 'AUDI', 'Toyota', 'Mitsubishi', 'Mazda', 'Cadillac',
'Citroen'];

$array_2 = ['Mercedes', 'AUDI', 'Mazda', 'Peugeot', 'FIAT'];

$array_3 = ['Mercedes', 'BMW', 'VW', 'Porsche', 'Bentley'];

$arr_assoc_1 = ['A' => 'Альфа', 'B' => 'Бета', 'C' => 'Гамма', 'D' => 'Дельта', 'E' => 'Омега',
'F' => 'Тета'];

$arr_assoc_2 = ['A' => 'Кси', 'B' => 'Пси', 'G' => 'Каппа', 'H' => 'Омикрон', 'I' => 'Сигма'];

//Запуск функций array_intersect(), array_diff(), array_unique()+array_merge()


$arr_int = array_intersect($array_1, $array_2, $array_3);
$arr_dif = array_diff($array_1, $array_2, $array_3);

$arr_assoc_1 = array_unique($arr_assoc_1);
$arr_assoc_2 = array_unique($arr_assoc_2);
$array_un = array_merge($arr_assoc_1, $arr_assoc_2);

//Вывод результатов работы функций на экран


echo "<b>Результат работы функции array_intersect():</b><p>";
foreach($arr_int as $v)
echo "{$v}; ";
echo "</p>";

6
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

echo "<b>Результат работы функции array_diff():</b><p>";


foreach($arr_dif as $v)
echo "{$v}; ";
echo "</p>";

echo "<b>Результат работы функций array_unique() и array_merge():</b><p>";


foreach($array_un as $v)
echo "{$v}; ";
echo "</p>";