- PHP: Функции для работы с массивами
- Создание массива
- Наполнение массива (добавление элементов)
- Узнать количество элементов в массиве (Размер массива)
- Работа с ключами массива
- Получение элементов массива
- Поиск и проверка элементов в массиве
- Удаление элементов из массива
- Объединение массивов
- Разделить массив на части
- Вернуть массив из значений одного столбца входного массива
- Фильтрация элементов массива с помощью callback-функции
- Применение callback-функции ко всем элементам указанных массивов
- Сумма значений массива
- Произведение значений массива
- Удаление повторяющихся значений из массива
- Присваивание переменным из списка значения подобно массиву
- Группировка массивов по ключу
PHP: Функции для работы с массивами
Популярные функции для работы с массивами в 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);
Пример с ассоциативным массивом:
$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_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_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_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)
Проверить, есть ли ключ в массиве:
$array = ['Audi', 'BMW', 'Honda']; if (array_key_exists(2, $array)) < echo 'Найден ключ 2'; >// или if (isset($array[2]))
Удаление элементов из массива
Функция unset() удаляет переменные и элементы массива:
$array = ['Audi', 'BMW', 'Honda']; // Удаление по ключу unset($array[1]); print_r($array);
Можно удалить элемент массива по значению:
$array = ['Audi', 'BMW', 'Honda']; // Удаление по значению unset($array[array_search('BMW', $array)]); print_r($array);
Для удаления пустых значений в массиве в PHP нет отдельной функции, поэтому применяют функцию array_diff() , которая возвращает расхождения массивов:
$array = ['Audi', '', 'Honda']; $array = array_diff($array, ['']); print_r($array);
Удалить повторяющиеся значения массива:
$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 )
Фильтрация элементов массива с помощью callback-функции
Отфильтруем массив пользователей и вернём только тех пользователей, возраст которых больше 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);
Применение callback-функции ко всем элементам указанных массивов
Вернём только имена пользователей используя функцию 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 ) )