Функции массивов в PHP: практическое применение и советы

Раздел: PHP -> Функции 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] => морковь
        )
)

Функции для работы с массивами в PHP - comments

En
функции работы с массивом php (php)