Массивы (функции)

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

array_chunk

$items = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5];

// Разбивает массив на части
$res = array_chunk($items, 2); // 3 атрибут bool, сохранить оригинальные ключи или нет
array(3) {
[0]=> array(2) { [0]=>int(1) [1]=> int(2) }
[1]=> array(2) { [0]=>int(3) [1]=> int(4) }
[2]=> array(1) { [0]=>int(5) }
}

array_combine

//Создаёт новый массив, используя один массив в качестве ключей, а другой для его значений
$arr1 = ['a','b','c'];
$arr2 = [1,2,3];
$res = array_combine($arr1, $arr2);
/// размер массивов обязательно должен быть одинаковый
array(3) {["a"]=>int(1) ["b"]=>int(2) ["c"]=>int(3)}

array_filter 

//array_filter — Фильтрует элементы массива через callback-функцию
//array_filter(array $array, ?callable $callback = null, int $mode = 0): array

// ARRAY_FILTER_USE_KEY — вместо значения массива как единственного аргумента callback-функции передавать только ключ массива.

// ARRAY_FILTER_USE_BOTH — вместо значения массива как единственного аргумента callback-функции передавать и значение — первым аргументом, и ключ массива — вторым аргументом.

$arr = [1,2,3,4,5,6,7,8,9,10];
$res = array_filter($arr, fn($number) => $number % 2 === 0);

array(5) { [1]=>int(2) [3]=>int(4) [5]=>int(6) [7]=>int(8) [9]=>int(10)}

// так же можно избавляться от пустых элементов массива, null, [] и тд
// если не передавать callback

array_keys

//Возвращает все или некоторое подмножество ключей массива
$array = ['a' => 5, 'b' => 10, 'c'=>15];
$keys = array_keys($array, 10); // 3й атрибут bool для стрикт мода

array(1) {[0]=>string(1) "b"}

array_map

// Применяет callback-функцию к элементам массивов
// array_map(?callable $callback, array $array, array ...$arrays): array

$array = [1,2,3];
$array = array_map(fn($number)=> $number * 3, $array);

array(3) {[0]=>int(3) [1]=>int(6) [2]=>int(9)}

//работа с несколькими массивами
$arr1 = ['a' => 1, 'b' => 2, 'c' =>3];
$arr2 = ['d' => 3, 'e' => 3, 'f' =>3];

$array = array_map(fn($number1,$number2)=> $number1 * $number2, $arr1, $arr2);

array(3) {[0]=>int(3) [1]=>int(6) [2]=>int(9)}
// ключи переиндексировались. желательно использовать массивы одинаковой длинны
// если это не так, более короткий будет заполнен пустыми значениями

array_merge

// сливает один или несколько массивов
// array_merge(array ...$arrays): array

$arr1 = ['a' => 1, 'b' => 2, 'c' =>3];
$arr2 = ['a' => 4, 'e' => 5, 'f' =>6];

$array = array_merge($arr1,$arr2);

array(5) {["a"]=>int(4) ["b"]=>int(2) ["c"]=>int(3) ["e"]=>int(5) ["f"]=>int(6)}
// одинаковые string ключи будут перезаписаны
// одинаковые int ключи переиндексированы а значения сохранены

array_reduce 

//Итеративно уменьшает массив к единственному значению через callback-функцию
//array_reduce(array $array, callable $callback, mixed $initial = null): mixed
//$initial начальное значение
$items = [
['price' => 5, 'qty'=>3 , 'desc' => 'item 1'],
['price' => 7, 'qty'=>2 , 'desc' => 'item 2'],
['price' => 11, 'qty'=>5 , 'desc' => 'item 3'],
];

$total = array_reduce(
  $items,
  fn($sum, $item) => $sum + $item['qty'] * $item['price']
); // int(84)

// $sum - результирующее значение, сохраняется каждую итерацию

array_search

//Ищет значение в массиве, и если находит, возвращает ключ первого найденного элемента
// array_search(mixed $needle, array $haystack, bool $strict = false): int|string|false

$array = ['a','b','c','d','b'];
$key = array_search('b',$array);
// $key = 1,  вернет первый успешный результат
// поиск чувствителен к регистру
// вернет false если ничего не найдет, так же может вернуть 0 для первого элемента, внимательнее с проверками
// либо сначала in_array() или $key !== null

array_diff

//Вычисляет расхождение массивов
//array_diff(array $array, array ...$arrays): array
//если точнее, первого массива со всеми остальными

$arr1 = ['a' => 1,'b'=> 2,'c'=>3];
$arr2 = ['x' => 1,'q'=> 2,'f'=>4];
array_diff($arr1,$arr2);

array(1) {["c"]=>int(3)}
// проверка только по значениям но не ключам

array_diff_assoc($arr1,$arr2);
array(3) {["a"]=>int(1) ["b"]=>int(2) ["c"]=>int(3)}
//полная проверка ключ значение

array_diff_key() //только для ключей

asort

//Сортирует массив в порядке возрастания, сохраняя ассоциацию индексов
$array = ['d'=>3,'b'=>1,'c'=>4,'a'=>2];

asort($array);
array(4) {["b"]=>int(1) ["a"]=>int(2) ["d"]=>int(3) ["c"]=>int(4)}

ksort($array); //сортировка по ключу
array(4) {["a"]=>int(2) ["b"]=>int(1) ["c"]=>int(4) ["d"]=>int(3)}

//функции работают по ссылке и меняют оригинальный массив

list

//Присваивает переменным значения как массиву

$array = [1,2,3];
list($a,$b,$c) = $array;

// теперь $a = 1 и тд

//краткая запись
[$a,$b,$c]= $array;

//можно пропускать элементы, точнее не указывать
[$a, ,$c]= $array;

//так же работать с многомерными массивами

$array = [1,2,3,[4,5]];
[$a,$b,$c,[$d,$e]];  // $e = 5, доступно сразу