Функции массивов в PHP: практическое применение и советы
Основные функции для работы с массивами в PHP
Эффективный подход: комбинация array_map, array_filter и array_reduce
Для типовых задач преобразования, фильтрации и агрегации массивов лучше всего использовать встроенные функции array_map, array_filter и array_reduce. Они работают быстрее циклов, делают код читаемым и защищают от ошибок управления итераторами.
// Пример: возвести каждый элемент в квадрат, оставить только четные значения, затем найти сумму
$numbers = [1, 2, 3, 4, 5, 6];
$squared = array_map(fn($n) => $n * $n, $numbers);
$evens = array_filter($squared, fn($n) => $n % 2 == 0);
$sum = array_reduce($evens, fn($carry, $item) => $carry + $item, 0);
echo $sum; // 56 (4+16+36)
функции работы с массивом php (функции для работы с массивами в php)
56
функция file php (функция file() в php)
Такая цепочка позволяет выполнить три операции без создания промежуточных переменных вручную.
Типичные ошибки:
- Забыть передать callback (вызовет Warning: expects parameter 1 to be a valid callback).
- В array_filter не указать режим сравнения ключей для ассоциативных массивов (по умолчанию проверяется только значение).
- В array_reduce пропустить начальное значение для пустого массива, что вызовет ошибку.
Как перебрать массив и изменить каждый элемент?
Вариант с array_map
// Удвоение значений
echo implode(', ', array_map(fn($x) => $x * 2, [1,2,3])); // 2,4,6
функция get php (функция get() в php)
2,4,6
функция php выводит данные на экран (вывод данных на экран в php)
Вариант с циклом foreach
$arr = [1,2,3];
foreach($arr as &$v) $v *= 2;
unset($v);
echo implode(', ', $arr); // 2,4,6
статическая функция php (статические методы в php)
2,4,6
Php функции даты (функции даты в php)
При использовании foreach с ссылкой нужно обязательно вызывать unset($v), чтобы не повредить последующие операции.
Как отфильтровать массив по условию?
// Оставим только строки длиной > 2
$fruits = ['яблоко', 'груша', 'вишня'];
$long = array_filter($fruits, fn($s) => mb_strlen($s) > 4);
print_r($long);
функция return php (оператор return в функциях php)
Array
(
[0] => яблоко
[2] => вишня
)
передача функции php (передача функции в качестве аргумента в php)
Результат сохраняет ключи. Чтобы переиндексировать, используется array_values.
Если нужно фильтровать по ключам, используется третий параметр ARRAY_FILTER_USE_KEY или ARRAY_FILTER_USE_BOTH.
$arr = ['a'=>1, 'b'=>2, 'c'=>3];
$result = array_filter($arr, fn($key) => $key != 'b', ARRAY_FILTER_USE_KEY);
print_r($result);
функция include php (подключение файлов с помощью include в php)
Array
(
[a] => 1
[c] => 3
)
написать функцию php (создание функции в php)
Как свести массив к одному значению?
// Сумма всех чисел
$nums = [5, 10, 15];
$total = array_reduce($nums, fn($carry, $num) => $carry + $num, 0);
echo $total; // 30
Php глобальные функции (глобальные функции в php)
30
Php proc open (функция proc_open в php)
Начальное значение обязательно. Если опустить, при пустом массиве возникнет ошибка.
Как объединить два массива?
$arr1 = ['a', 'b'];
$arr2 = ['c', 'd'];
$merged = array_merge($arr1, $arr2);
print_r($merged); // [0=>'a',1=>'b',2=>'c',3=>'d']
функция array php (функция array() в php)
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
)
Php arguments (аргументы функций php)
При числовых ключах array_merge переиндексирует. Если нужно сохранить ключи и заменить дубликаты (ассоциативные), используют оператор + или array_replace.
Как найти различия между массивами?
$first = [1, 2, 3];
$second = [2, 3, 4];
$diff = array_diff($first, $second);
print_r($diff); // [0=>1]
Array
(
[0] => 1
)
array_diff сравнивает строковое представление. Для строгого сравнения с учётом типа используйте array_diff_assoc.
Как отсортировать массив?
$arr = [3, 1, 2];
sort($arr);
print_r($arr); // [0=>1,1=>2,2=>3]
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Для сортировки с сохранением ключей используется asort, для сортировки по ключам ksort. Пользовательская сортировка возможна через usort.
После sort теряются исходные ключи. Если ключи важны, применяется asort.
Как применить функцию к каждому элементу без изменения исходного массива?
$arr = [1, 2, 3];
array_walk($arr, function(&$value, $key) {
$value *= 2;
});
print_r($arr); // [2,4,6]
Array
(
[0] => 2
[1] => 4
[2] => 6
)
array_walk изменяет массив по ссылке, если callback принимает ссылку. Чтобы не менять, используют array_map.
Как получить срез массива?
$arr = ['a','b','c','d'];
$slice = array_slice($arr, 1, 2);
print_r($slice); // [0=>'b',1=>'c']
Array
(
[0] => b
[1] => c
)
array_slice возвращает последовательность. array_splice удаляет и вставляет элементы.
Как проверить наличие элемента?
$fruits = ['яблоко', 'груша', 'вишня'];
if (in_array('груша', $fruits)) {
echo 'Найдено'; // выведет
}
$key = array_search('вишня', $fruits);
echo $key; // 2
Найдено 2
in_array использует нестрогое сравнение. Для строгого передайте третий параметр true.
Как удалить повторяющиеся значения?
$arr = [1,1,2,2,3];
$unique = array_unique($arr);
print_r($unique); // [0=>1,2=>2,4=>3]
Array
(
[0] => 1
[2] => 2
[4] => 3
)
Ключи сохраняются. Если нужна переиндексация, дополнительно используют array_values.
Расширенные примеры работы с массивами
// 1. Рекурсивная фильтрация многомерного массива
$multi = [
['name' => 'PHP', 'type' => 'lang'],
['name' => 'HTML', 'type' => 'markup']
];
$filtered = array_filter($multi, fn($item) => $item['type'] === 'lang');
print_r($filtered);
Array
(
[0] => Array
(
[name] => PHP
[type] => lang
)
)
// 2. Применение array_map с несколькими массивами
$a = [1, 2, 3];
$b = [4, 5, 6];
$c = array_map(fn($x, $y) => $x * $y, $a, $b);
print_r($c);
Array
(
[0] => 4
[1] => 10
[2] => 18
)
// 3. array_reduce с разными начальными значениями
$words = ['Hello', 'World'];
$joined = array_reduce($words, fn($carry, $w) => $carry . ' ' . $w, '');
echo trim($joined); // 'Hello World'
Hello World
// 4. Сортировка по пользовательскому полю с usort
$people = [
['name' => 'Иван', 'age' => 30],
['name' => 'Петр', 'age' => 25]
];
usort($people, fn($a, $b) => $a['age'] <=> $b['age']);
print_r($people);
Array
(
[0] => Array
(
[name] => Петр
[age] => 25
)
[1] => Array
(
[name] => Иван
[age] => 30
)
)
// 5. Объединение ассоциативных массивов с перезаписью
$default = ['host' => 'localhost', 'port' => 80];
$custom = ['port' => 8080, 'user' => 'admin'];
$result = array_merge($default, $custom);
print_r($result);
Array
(
[host] => localhost
[port] => 8080
[user] => admin
)
// 6. array_diff_assoc для строгого сравнения
$a = [1, '2', 3];
$b = ['1', 2, 4];
$diff = array_diff_assoc($a, $b);
print_r($diff); // [1=>'2',2=>3] (строгое сравнение, строка '2' не равна числу 2)
Array
(
[1] => 2
[2] => 3
)
// 7. array_walk с передачей дополнительных параметров
$arr = [1, 2, 3];
array_walk($arr, function(&$val, $key, $mult) {
$val *= $mult;
}, 10);
print_r($arr); // [10,20,30]
Array
(
[0] => 10
[1] => 20
[2] => 30
)
// 8. array_slice с сохранением ключей
$arr = ['a'=>1, 'b'=>2, 'c'=>3];
$slice = array_slice($arr, 1, 1, true);
print_r($slice); // ['b'=>2]
Array
(
[b] => 2
)
// 9. array_unique для многомерного массива с использованием пользовательской функции
$multi = [[1,2], [1,2], [3,4]];
$unique = array_unique($multi, SORT_REGULAR);
print_r($unique);
Array
(
[0] => Array
(
[0] => 1
[1] => 2
)
[2] => Array
(
[0] => 3
[1] => 4
)
)
// 10. Использование array_reduce для группировки
$items = [
['category' => 'fruit', 'name' => 'яблоко'],
['category' => 'fruit', 'name' => 'груша'],
['category' => 'veg', 'name' => 'морковь']
];
$grouped = array_reduce($items, function($carry, $item) {
$carry[$item['category']][] = $item['name'];
return $carry;
}, []);
print_r($grouped);
Array
(
[fruit] => Array
(
[0] => яблоко
[1] => груша
)
[veg] => Array
(
[0] => морковь
)
)