Конспект «Массивы и функции в PHP»

Функции

Функция — это фрагмент кода, который можно написать один раз, а затем использовать, когда потребуется.

Прежде чем использовать функцию, её объявляют с помощью ключевого слова function. После него указывают имя функции. Оно должно начинаться с латинской буквы или знака подчёркивания.

После имени функции пишут круглые скобки, а затем — тело функции в фигурных скобках. В теле функции находится тот код, который функция будет выполнять.

function my_func() {
  keks_log('Я функция my_func');
}

Когда функцию объявляют, PHP запоминает её, но при этом код внутри фигурных скобок не выполняется. Чтобы его выполнить, функцию надо вызвать.

Чтобы вызвать функцию, пишем её имя и круглые скобки:

my_func(); // Выведет: "Я функция my_func"

Функцию можно вызывать любое число раз.

Переменные, объявленные внутри функции, доступны только внутри этой функции. А внешние переменные, наоборот, внутри функции не видны. Это называется областью видимости. Вы можете узнать о ней больше в документации.

Мы можем вызывать одну функцию внутри другой.

Аргументы функции

Аргументы позволяют передавать функции разные данные и влиять на результат её работы. Аргументы указывают при объявлении функции в круглых скобках. Их может быть сколько угодно. Если аргументов несколько, они указываются через запятую.

Аргументы похожи на переменные. Они тоже хранят значения, и их имена должны начинаться со знака доллара. Аргументы можно использовать только в теле функции:

function my_func($number_1, $number_2) {
  keks_log($number_1 - $number_2);
}

Значения аргументов указывают в круглых скобках при вызове функции. Их перечисляют через запятую в том же порядке, что и аргументы при объявлении функции.

my_func(3, 1); // Выведет: "2"
my_func(1, 3); // Выведет: "-2"

Функция возвращает значение

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

function my_func($number_1, $number_2) {
  return $number_1 - $number_2;
}

Когда функцию вызовут, на её место в коде подставится то значение, которое она вернёт.

<!-- Вызываем функцию в шаблоне -->
<p><?= my_func(3, 1) ?></p>

<!-- Результат  -->
<p>2</p>

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

function my_func($number_1, $number_2) {
  return $number_1 - $number_2;

  // Код на следующей строке никогда не будет исполнен
  keks_log('Есть ли жизнь после return?');
}

Функция может ничего не возвращать или вернуть одно любое значение: число, строку, массив и так далее.

Встроенные функции

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

Колбэком называют функцию, которую передают в качестве аргумента другой функции. Колбэки не являются встроенными функциями, их пишут сами разработчики.

uasort

Встроенная функция uasort сортирует массив. Эта функция принимает два аргумента: массив, который нужно отсортировать, и имя функции-колбэка.

uasort($array, 'callback');

Функция-колбэк, которую мы передаём uasort, должна принимать два аргумента и возвращать число: положительное число, если первый аргумент больше, отрицательное число, если больше второй аргумент, и ноль, если аргументы равны.

Во время вызова uasort передаёт в колбэк по двое элементы массива, узнаёт, какой из них больше, и сортирует массив по возрастанию: от меньшего к большему.

array_slice

Функция array_slice принимает массив, копирует его часть и возвращает её в виде нового массива. Массив, который передали функции, при этом не изменяется.

Функция принимает четыре аргумента:

  • исходный массив,
  • порядковый номер элемента, с которого начнётся копирование,
  • количество элементов, которые нужно скопировать,
  • булево значение — нужно ли сохранять ключи исходного массива.
$new_array = array_slice($array, $first_element, $length, $preserve_keys);

array_filter

В PHP есть встроенная функция фильтрации — array_filter. Она принимает два аргумента: исходный массив и функцию-колбэк — и возвращает новый массив. Исходный массив при этом не изменяется.

$filtered_array = array_filter($array, 'callback');

Согласно документации, колбэк должен принимать элемент исходного массива и возвращать булево значение: true, если этот элемент нужно включить в новый массив, и false, если не нужно.

array_rand

Для получения случайных элементов из массива, используем функцию array_rand. Она принимает исходный массив и количество случайных элементов, которые мы хотим получить.

$random = array_rand($array, $number_of_elements);

Если второй аргумент — единица, функция вернёт один случайный ключ. Если второй аргумент больше единицы, функция вернёт массив со случайными ключами.

Функция array_rand выбирает случайные элементы, но возвращает их в том порядке, в каком они идут в исходном массиве.

shuffle

Встроенная функция shuffle перемешивает массив. Функция принимает массив и выстраивает его элементы в случайном порядке. Будьте осторожны, функция shuffle изменяет переданный ей массив и не сохраняет ключи. С ассоциативными массивами её лучше не использовать.

shuffle($array);

Объединение массивов

В PHP массивы можно объединить с помощью знака плюс:

$big_array = $array_1 + $array_2;

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

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

Бабушка Кекс

Притормози, дружище

Проходить вызовы части «Массивы и функции в PHP» тренажёра «Знакомство с PHP» можно после регистрации и оформления подписки.