Эффективная работа с массивами: PHP функции и приёмы

Раздел: PHP -> Массивы

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

Как применить функцию к каждому элементу массива?

Самым эффективным и лаконичным способом является использование array_map. Она возвращает новый массив, применяя callback к каждому элементу.

$numbers = [1, 2, 3, 4];
$doubled = array_map(function($n) { return $n * 2; }, $numbers);
// $doubled: [2, 4, 6, 8]

Php ключи массива (получение ключей массива в php)

Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )

Php массивы индексы (получение индексов массива в php)

Цель: быстрое преобразование всех элементов без изменения исходного массива.

Вариант 1: использование именованной функции.

function multiply($n) { return $n * 2; }
$doubled = array_map('multiply', $numbers);

массив данных php (работа с массивом данных в php)

Вариант 2: передача нескольких массивов для поэлементной обработки.

$a = [1, 2]; $b = [10, 20];
$sum = array_map(function($x, $y) { return $x + $y; }, $a, $b);
// $sum: [11, 22]

массив ли php (проверка, является ли переменная массивом в php)

Вариант 3: использование array_walk, если нужно изменять массив по ссылке и не возвращать новый.

$array = [1, 2, 3];
array_walk($array, function(&$v) { $v *= 2; });
// $array: [2, 4, 6]

Php разбить массив (разбиение массива на части в php)

Цель вариантов: когда требуется повторное использование callback, работа с несколькими массивами, или модификация исходного массива без создания копии.

Типичные ошибки:

  • Забыть, что array_map не изменяет исходный массив, а возвращает новый.
  • При указании нескольких массивов они должны быть одинаковой длины, иначе результат будет до минимальной длины.
  • Callback не может передавать элементы по ссылке, поэтому для модификации исходного массива подходит array_walk.

Как отфильтровать массив по заданному условию?

array_filter - основное решение для фильтрации. Без callback удаляет значения, равные false.

$array = [0, 'text', '', null, false, 5];
$filtered = array_filter($array);
// $filtered: [1 => 'text', 5 => 5]

Php переменные массив (создание массива из переменных в php)

Array ( [1] => text [5] => 5 )

Php сортировка массива (сортировка массива в php)

Цель: простейшая очистка от пустых значений.

Вариант 1: фильтрация с пользовательским callback.

$numbers = [1, 2, 3, 4, 5];
$even = array_filter($numbers, function($v) { return $v % 2 == 0; });
// $even: [1 => 2, 3 => 4]

ассоциативный массив php (ассоциативные массивы в php)

Вариант 2: фильтрация по ключам с использованием флага ARRAY_FILTER_USE_KEY.

$array = ['a' => 1, 'b' => 2, 'c' => 3];
$filtered = array_filter($array, function($k) { return $k != 'b'; }, ARRAY_FILTER_USE_KEY);
// $filtered: ['a' => 1, 'c' => 3]

Php удалить массива (удаление всего массива в php)

Вариант 3: фильтрация с помощью array_intersect для нахождения общих значений двух массивов.

$source = [1, 2, 3, 4];
$allowed = [2, 4];
$result = array_intersect($source, $allowed);
// $result: [1 => 2, 3 => 4]

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

Цель вариантов: гибкая фильтрация по значениям, ключам или пересечению множеств.

Типичные ошибки:

  • По умолчанию array_filter сохраняет ключи, что может привести к разрыву индексации. Используйте array_values для переиндексации.
  • Если callback возвращает не логическое значение, а, например, число, оно приводится к bool, что может быть неочевидно.

Как отсортировать массив по значениям или ключам?

sort() - простейшая сортировка по возрастанию значений, сбрасывает ключи.

$colors = ['red', 'green', 'blue'];
sort($colors);
// $colors: ['blue', 'green', 'red']

Php удалить массив (удаление массива в php)

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

Php array keys (функция array_keys в php)

Цель: быстрая сортировка без сохранения исходных ключей.

Вариант 1: asort() - сортировка по значениям с сохранением ключей.

$ages = ['Peter' => 25, 'Alice' => 30, 'John' => 20];
asort($ages);
// $ages: ['John' => 20, 'Peter' => 25, 'Alice' => 30]

Php массив в строку (преобразование массива в строку php)

Array ( [John] => 20 [Peter] => 25 [Alice] => 30 )

Php key (ключи и массивы в php)

Вариант 2: ksort() - сортировка по ключам.

ksort($ages);
// $ages: ['Alice' => 30, 'John' => 20, 'Peter' => 25]

Вариант 3: usort() - пользовательская сортировка по заданному критерию.

$people = [['name'=>'John','age'=>25], ['name'=>'Alice','age'=>20]];
usort($people, function($a, $b) { return $a['age'] <=> $b['age']; });
// $people: [['name'=>'Alice','age'=>20], ['name'=>'John','age'=>25]]

Цель вариантов: сохранение ключей (asort, ksort) или сложные критерии (usort).

Типичные ошибки:

  • sort, asort и другие изменяют исходный массив, а не возвращают новый.
  • При usort важно корректно возвращать -1, 0, 1 (или использовать оператор <=>).
  • Если массив содержит объекты, сортировка может привести к неожиданным результатам.

Как объединить несколько массивов в один?

array_merge() - универсальный способ слияния массивов. Числовые ключи перенумеровываются, строковые - перезаписываются.

$arr1 = [1, 2];
$arr2 = [3, 4];
$merged = array_merge($arr1, $arr2);
// $merged: [1, 2, 3, 4]
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )

Цель: объединение с переиндексацией и перезаписью строковых ключей.

Вариант 1: оператор + - сохраняет первые ключи, не перезаписывает.

$a = ['a' => 1, 'b' => 2];
$b = ['b' => 3, 'c' => 4];
$result = $a + $b;
// $result: ['a' => 1, 'b' => 2, 'c' => 4]

Вариант 2: array_replace() - заменяет значения из второго массива, но сохраняет числовые ключи.

$base = [1, 2, 3];
$replace = [0 => 10, 2 => 30];
$result = array_replace($base, $replace);
// $result: [10, 2, 30]

Цель вариантов: контроль перезаписи (оператор +) или частичная замена (array_replace).

Типичные ошибки:

  • При array_merge строковые ключи перезаписываются без предупреждения.
  • Оператор + не переиндексирует числовые ключи, что может привести к коллизиям.
  • Для вложенных массивов array_merge не рекурсивен (используйте array_merge_recursive).

Дополнительные примеры и нестандартные сценарии

Преобразование многомерного массива с array_map и array_column

Пример
$users = [
    ['id' => 1, 'name' => 'John'],
    ['id' => 2, 'name' => 'Alice'],
];
$names = array_column($users, 'name');
// $names: ['John', 'Alice']

$users_with_email = array_map(function($user) {
    $user['email'] = strtolower($user['name']).'@example.com';
    return $user;
}, $users);
// $users_with_email: [['id'=>1,'name'=>'John','email'=>'john@example.com'], ...]
Array ( [0] => Array ( [id] => 1 [name] => John [email] => john@example.com ) [1] => Array ( [id] => 2 [name] => Alice [email] => alice@example.com ) )

Сведение массива с array_reduce для вычисления суммы, произведения или конкатенации

Пример
$numbers = [1, 2, 3, 4];
$sum = array_reduce($numbers, function($carry, $item) {
    return $carry + $item;
}, 0);
// $sum = 10

$product = array_reduce($numbers, function($carry, $item) {
    return $carry * $item;
}, 1);
// $product = 24

$words = ['Hello', ' ', 'World'];
$sentence = array_reduce($words, function($carry, $item) {
    return $carry . $item;
}, '');
// $sentence = 'Hello World'
10
24
Hello World

Фильтрация и переиндексация с array_values

Пример
$mixed = [0, 'apple', '', 'banana', null];
$filtered = array_filter($mixed);
$indexed = array_values($filtered);
// $indexed: ['apple', 'banana']
Array ( [0] => apple [1] => banana )

Сортировка многомерного массива по нескольким полям с usort

Пример
$data = [
    ['name' => 'John', 'age' => 30],
    ['name' => 'Alice', 'age' => 25],
    ['name' => 'John', 'age' => 20],
];
usort($data, function($a, $b) {
    $cmp = strcmp($a['name'], $b['name']);
    if ($cmp == 0) {
        return $a['age'] <=> $b['age'];
    }
    return $cmp;
});
// Сортировка по имени, затем по возрасту
// Результат: Alice(25), John(20), John(30)
Array ( [0] => Array ( [name] => Alice [age] => 25 ) [1] => Array ( [name] => John [age] => 20 ) [2] => Array ( [name] => John [age] => 30 ) )

Рекурсивное применение array_walk_recursive для многомерного массива

Пример
$nested = ['a' => [1, 2], 'b' => [3, [4, 5]]];
$result = [];
array_walk_recursive($nested, function($value, $key) use (&$result) {
    $result[] = $value * 10;
});
// $result: [10, 20, 30, 40, 50]
Array ( [0] => 10 [1] => 20 [2] => 30 [3] => 40 [4] => 50 )

Использование array_diff и array_intersect для сравнения массивов

Пример
$a = [1, 2, 3, 4];
$b = [2, 4, 6];
$diff = array_diff($a, $b);
// $diff: [0 => 1, 2 => 3]

$intersect = array_intersect($a, $b);
// $intersect: [1 => 2, 3 => 4]
Array ( [0] => 1 [2] => 3 )
Array ( [1] => 2 [3] => 4 )

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

En
функции массива php (php)