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

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

Разберём самые популярные из них.

Создать пустой массив:

$array = [];

// До версии PHP 5.4 массив создавался при помощи языковой конструкции array(). Можно и до сих создавать массивы таким образом:
$array = array();

Создать массив с элементами:

$array = ['Audi', 'BMW', 'Honda'];

// Или так
$array = array('Audi', 'BMW', 'Honda');

При необходимости можно воспользоваться функцией array_fill($start, $size, $value), которая создаст массив с количеством $size элементов со значением $value, начиная с индекса $start.

$array = array_fill(0, 3, 'Text');
print_r($array);

Результат:

Array
(
  [0] => Text
  [1] => Text
  [2] => Text
)

Можно воспользоваться функцией explode(), которая из строки $string создаст массив используя разделитель $delimiter, в данном случае запятая.

$string = 'Text1,Text2,Text3';
$array = explode(',', $string);
print_r($array);

Результат:

Array
(
  [0] => Text1
  [1] => Text2
  [2] => Text3
)

Функция str_split() преобразует строку в массив:

$string = "string";
$array = str_split($string);
print_r($array);

Результат:

Array
(
  [0] => s
  [1] => t
  [2] => r
  [3] => i
  [4] => n
  [5] => g
)

Функция compact() создаёт массив, содержащий названия переменных и их значения:

$title = 'Title';
$description = 'Description';
$result = compact('title', 'description');
print_r($result);

Результат:

Array
(
  [title] => Title
  [description] => Description
)
// Создаём пустой массив
$array = [];
// Добавляем элементы в массив
$array[] = 'Audi';
$array[] = 'BMW';
$array[] = 'Honda';

print_r($array);

Можно сразу определить ключ (индекс) для значения массива:

$array = [];
$array[] = 'Audi';
$array[] = 'BMW';
$array[] = 'Honda';
$array[5] = 'Jaguar';
$array['lada'] = 'Lada';
print_r($array);

Результат:

Array
(
  [0] => Audi
  [1] => BMW
  [2] => Honda
  [5] => Jaguar
  [lada] => Lada
)

Функция array_unshift() добавляет один или несколько элементов в начало массива:

$array = ['Audi', 'BMW', 'Honda'];
array_unshift($array, "Lada", "Mazda");
print_r($array);

Результат:

Array
(
  [0] => Lada
  [1] => Mazda
  [2] => Audi
  [3] => BMW
  [4] => Honda
)

Функция array_push() добавляет один или несколько элементов в конец массива:

$array = ['Audi', 'BMW', 'Honda'];
array_push($array, "Lada", "Mazda");
print_r($array);

Результат:

Array
(
  [0] => Audi
  [1] => BMW
  [2] => Honda
  [3] => Lada
  [4] => Mazda
)

Узнать количество элементов массива (размер массива) можно следующими способами:

// Функция count()
$array = ['Audi', 'BMW', 'Honda'];
$count = count($array);
print_r($count); // 3

// Функция sizeof()
$array = ['Audi', 'BMW', 'Honda'];
$size = sizeof($array);
print_r($size); // 3

Если в функцию count() вторым параметром передать встроенную в PHP константу COUNT_RECURSIVE, то мы получим количество элементов массива и всех подмассивов, которые в нём находятся:

$cars = [
  'Russian Federation' => [
    'Lada',
    'ГАЗ',
  ],
  'Germany' => [
    'Mercedes Benz',
    'Audi',
    'BMW',
    'Porsche',
    'Opel',
  ]
];

$count = count($cars, COUNT_RECURSIVE);
print_r($count); // 9

Проверить существование ключа (индекса):

$array = [
  'key_1' => 'Value 1',
  'key_2' => 'Value 2',
  'key_3' => 'Value 3',
];

if (array_key_exists('key_2', $array)) echo 'Ключ существует';
else echo 'Ключ не найден!';

Получить элемент массива по его ключу (индексу):

$array = ['Audi', 'BMW', 'Honda'];
// Получить первый элемент
$elem = $array[0];
print_r($elem); // Audi

Функция array_keys() возвращает числовые и строковые ключи, содержащиеся в массиве:

$array = ['Audi', 'BMW', 'Honda'];
$keys = array_keys($array);
print_r($keys);

Результат:

Array
(
  [0] => 0
  [1] => 1
  [2] => 2
)

Пример с ассоциативным массивом:

$cars = [
  'Russian Federation' => [
    'Lada',
    'ГАЗ',
  ],
  'Germany' => [
    'Mercedes Benz',
    'Audi',
    'BMW',
    'Porsche',
    'Opel',
  ]
];
$keys = array_keys($cars);
print_r($keys);

Результат:

Array
(
  [0] => Russian Federation
  [1] => Germany
)

Функция array_key_first() получает первый ключ массива:

$array = ['Audi', 'BMW', 'Honda'];
$elem = array_key_first($array);
print_r($elem); // 0

Функция array_key_last() получает последний ключ массива:

$array = ['Audi', 'BMW', 'Honda'];
$elem = array_key_last($array);
print_r($elem); // 2

Функция array_search() осуществляет поиск данного значения в массиве и возвращает ключ первого найденного элемента в случае успешного выполнения:

$array = ['Audi', 'BMW', 'Honda'];
$elem = array_search('BMW', $array);
print_r($elem); // 1

Получить элемент массива по его ключу (индексу):

$array = ['Audi', 'BMW', 'Honda'];
// Получить первый элемент
$elem = $array[0];
print_r($elem); // Audi

Ассоциативный массив:

$cars = [
  'Russian Federation' => [
    'Lada',
    'ГАЗ',
  ],
  'Germany' => [
    'Mercedes Benz',
    'Audi',
    'BMW',
    'Porsche',
    'Opel',
  ]
];
$elem = $cars['Germany'];
print_r($elem);

Результат:

Array
(
  [0] => Mercedes Benz
  [1] => Audi
  [2] => BMW
  [3] => Porsche
  [4] => Opel
)

Получить первый элемент массива (функция current()):

$array = ['Audi', 'BMW', 'Honda'];
$elem = current($array);
print_r($elem); // Audi

Получить последний элемент массива (функция end()):

$array = ['Audi', 'BMW', 'Honda'];
$elem = end($array);
print_r($elem); // Honda

Получить часть (срез) массива. Функция array_slice($array, $offset, $length) возвращает часть массива начиная с индекса $offset длиной $length. Если $offset отрицательный, то отчет начинается с конца массива. $length можно не указывать, тогда функция вернет все элементы до конца массива начиная с индекса $offset:

$array = ['Audi', 'BMW', 'Honda'];
$elements = array_slice($array, 0, 2);
print_r($elements);

Результат:

Array
(
  [0] => Audi
  [1] => BMW
)

Функция array_shift() извлекает первый элемент из массива и возвращает его значение.

$array = ['Audi', 'BMW', 'Honda'];
$first = array_shift($array);
print_r($first); // Audi

Все числовые ключи будут изменены таким образом, что нумерация массива начнётся с нуля, в то время как строковые ключи останутся прежними:

$array = ['Audi', 'BMW', 'Honda'];
$first = array_shift($array);
print_r($array);

Результат:

Array
(
  [0] => BMW
  [1] => Honda
)

Функция array_pop() извлекает последний элемент из массива и возвращает его значение.

$array = ['Audi', 'BMW', 'Honda'];
$last = array_pop($array);
print_r($last); // Honda

Чтобы извлечь из массива часть, можно применить функции array_slice() и array_diff().

$array = ['Audi', 'BMW', 'Honda'];
$slice = array_slice($array, 0, 2);
$diff = array_diff($array, $slice);

print_r($slice);
print_r($diff);

Результат:

Array
(
  [0] => Audi
  [1] => BMW
)
Array
(
  [2] => Honda
)

Выбрать все значения из массива можно с помощью функции array_values(). Создаётся новый массив из исходного массива, игнорируя его ключи:

$array = ['Audi', 'BMW', 'Honda'];
$values = array_values($array);
print_r($values);

Результат:

Array
(
  [0] => Audi
  [1] => BMW
  [2] => Honda
)

Выбрать все ключи массива можно с помощью функции array_keys(). Создаётся новый массив состоящий из ключей исходного массива:

$array = ['Audi', 'BMW', 'Honda'];
$keys = array_keys($array);
print_r($keys);

Результат:

Array
(
  [0] => 0
  [1] => 1
  [2] => 2
)

Выбрать все случайные ключи из массива можно с помощью функции array_rand($array, $count). Если $count больше единицы, то результат будет в виде массива:

$array = ['Audi', 'BMW', 'Honda'];
$rand = array_rand($array);
$rand_2 = array_rand($array, 2);

print_r($rand);
print_r($rand_2);

Проверить, есть ли значение в массиве:

$array = ['Audi', 'BMW', 'Honda'];

if (in_array('BMW', $array)) {
  echo 'Найдено значение "BMW"';
}

// или
if (array_search('BMW', $array) !== false) {
  echo 'Найдено значение "BMW"';
}

Проверить, есть ли ключ в массиве:

$array = ['Audi', 'BMW', 'Honda'];

if (array_key_exists(2, $array)) {
  echo 'Найден ключ 2';
}

// или
if (isset($array[2])) {
  echo 'Найден ключ 2';
}

Функция unset() удаляет переменные и элементы массива:

$array = ['Audi', 'BMW', 'Honda'];

// Удаление по ключу
unset($array[1]);

print_r($array);

Результат:

Array
(
  [0] => Audi
  [2] => Honda
)

Можно удалить элемент массива по значению:

$array = ['Audi', 'BMW', 'Honda'];

// Удаление по значению
unset($array[array_search('BMW', $array)]);

print_r($array);

Результат:

Array
(
  [0] => Audi
  [2] => Honda
)

Для удаления пустых значений в массиве в PHP нет отдельной функции, поэтому применяют функцию array_diff(), которая возвращает расхождения массивов:

$array = ['Audi', '', 'Honda'];
$array = array_diff($array, ['']);
print_r($array);

Результат:

Array
(
  [0] => Audi
  [2] => Honda
)

Удалить повторяющиеся значения массива:

$array = ['Audi', 'BMW', 'Audi', 'Honda'];
$array = array_unique($array);
print_r($array);

Результат:

Array
(
  [0] => Audi
  [1] => BMW
  [3] => Honda
)
$array_1 = ['Audi', 'BMW', 'Honda'];
$array_2 = ['Lexus', 'Nissan'];
$result = array_merge($array_1, $array_2);
print_r($result);

Результат:

Array
(
  [0] => Audi
  [1] => BMW
  [2] => Honda
  [3] => Lexus
  [4] => Nissan
)

Функция array_chunk($array, $size) создает новый многомерный массив из исходного, деля его на равные части:

$array = ['Audi', 'BMW', 'Honda', 'Lexus', 'Nissan', 'Mazda', 'Opel', 'Subaru'];
$result = array_chunk($array, 3);
print_r($result);

Результат:

Array
(
  [0] => Array
  (
    [0] => Audi
    [1] => BMW
    [2] => Honda
  )
  [1] => Array
  (
    [0] => Lexus
    [1] => Nissan
    [2] => Mazda
  )
  [2] => Array
  (
    [0] => Opel
    [1] => Subaru
  )
)

Если требуется разделить массив на определенное количество частей можно воспользоваться следующим приемом:

$array = ['Audi', 'BMW', 'Honda', 'Lexus', 'Nissan', 'Mazda', 'Opel', 'Subaru'];
$result = array_chunk($array, ceil(count($array) / 2));
print_r($result);

Результат:

Array
(
	[0] => Array
  (
    [0] => Audi
    [1] => BMW
    [2] => Honda
    [3] => Lexus
  )

	[1] => Array
  (
    [0] => Nissan
    [1] => Mazda
    [2] => Opel
    [3] => Subaru
  )
)
$users = [
  [
    'id' => 1,
    'name' => 'John',
    'age' => 26,
  ],
  [
    'id' => 2,
    'name' => 'Tyler',
    'age' => 18,
  ],
  [
    'id' => 3,
    'name' => 'Eric',
    'age' => 45,
  ],
];

$names = array_column($users, 'name');
print_r($names);

Результат:

Array
(
  [0] => John
  [1] => Tyler
  [2] => Eric
)

Отфильтруем массив пользователей и вернём только тех пользователей, возраст которых больше 20 лет при помощи функции array_filter():

$users = [
  [
    'id' => 1,
    'name' => 'John',
    'age' => 26,
  ],
  [
    'id' => 2,
    'name' => 'Tyler',
    'age' => 18,
  ],
  [
    'id' => 3,
    'name' => 'Eric',
    'age' => 45,
  ],
];

$result = array_filter($users, function ($user) {
  return $user['age'] > 20;
});

print_r($result);

Результат:

Array
(
  [0] => Array
    (
      [id] => 1
      [name] => John
      [age] => 26
    )

  [2] => Array
    (
      [id] => 3
      [name] => Eric
      [age] => 45
    )
)

Можно использовать стрелочную функцию

$result = array_filter($users, fn($user) => $user['age'] > 20);

Вернём только имена пользователей используя функцию array_map():

$names = array_map(function ($user) {
  return $user['name'];
}, $users);

// С помощью стрелочной функции
$names = array_map(fn($user) => $user['name'], $users);

// Этот результат можно получить и так:
$names = array_column($users, 'name');

Вернём только имена пользователей, возраст которых больше 20 лет:

$names = array_map(function ($user) {
  return $user['name'];
}, array_values(array_filter($users, fn($user) => $user['age'] > 20)));

Или так:

$names = array_map(
  fn($user) => $user['name'],
  array_values(
    array_filter($users, fn($user) => $user['age'] > 20)
  )
);

Функция array_sum() вычисляет сумму значений массива:

$numbers = [2, 7, 28];
$sum = array_sum($numbers);
print_r($sum); // 37

Функция array_product() вычисляет произведение (умножение) элементов массива:

$numbers = [2, 7, 28];
$sum = array_product($numbers);
print_r($sum); // 392

Функция array_unique() убирает повторяющиеся значения из массива:

$input = ["a" => "green", "red", "b" => "green", "blue", "red"];
$result = array_unique($input);
print_r($result);

Результат:

Array
(
  [a] => green
  [0] => red
  [1] => blue
)

Языковая конструкция list присваивает переменным из списка значения подобно массиву:

$cars = ['Mazda', 'BMW', 'Honda'];
list($a, $b, $c) = $cars;
print_r($a); // Mazda

Дано: Есть многомерный массив из товаров с типами цен:

$array = [
  0 => [
    'supplierId' => '1490000210',
    'vat_mrc' => 20839.2,
  ],
  1 => [
    'supplierId' => '1490000210',
    'tarif' => 18280,
  ],
  2 => [
    'supplierId' => '1490000210',
    'vat_tarif' => 21936,
  ],
  3 => [
    'supplierId' => '1079000450',
    'vat_mrc' => 19328.06,
  ],
  4 => [
    'supplierId' => '1079000450',
    'tarif' => 21765.83,
  ],
  5 => [
    'supplierId' => '1079000450',
    'mrc' => 10300.30,
  ],
];
  • supplierId - код поставщика
  • vat_mrc - минимальная розничная цена с НДС
  • mrc - минимальная розничная цена без НДС
  • vat_tarif - тарифная цена с НДС
  • tarif - тарифная цена без НДС

Задача: Сгруппировать товары по коду поставщика. То есть, из пяти представленных массивов должно получиться два со всеми типами цен:

$result = [];
foreach ($array as $item):
  foreach ($item as $key => $value):
    $result[$item['supplierId']][$key] = $value;
  endforeach;
endforeach;

Результат:

Array
(
[1490000210] => Array
  (
    [supplierId] => 1490000210
    [vat_mrc] => 20839.2
    [tarif] => 18280
    [vat_tarif] => 21936
  )
[1079000450] => Array
  (
    [supplierId] => 1079000450
    [vat_mrc] => 19328.06
    [tarif] => 21765.83
    [mrc] => 10300.3
  )
)