Магия array_map

58
07.02.2019
17.04.2019

array_map ( callable $callback , array $array1 [, array $... ] ) : array

Функция array_map() возвращает массив, содержащий элементы array1 после их обработки callback-функцией. Количество параметров, передаваемых callback-функции, должно совпадать с количеством массивов, переданным функции array_map().

В данном посте рассмотрим, где и как можно использовать данную крайне полезную функцию.

Выбрать один элемент каждого из ассоциативных элементов массива

Простейший пример - выборка из массива ассоциативных массивов списка элементов, наприме, списка ID товаров:

$arProductIDs = array_map(function ($item){
	return $item['PRODUCT_ID'];
},$arResult['GRID']['ROWS']);

Вывести через слеш значения одного из ключей элементов массива.

Итак, имеем массив такого вида:

$sections = [
0=>['NAME'=>'Sect 1',....],
1=>['NAME'=>'Sect 2',....]
];

Нам нужно получить из этого массива путь из названий вида:

$s = 'Sect 1 / Sect 2';

Можем, конечно же в массиве перебирать все элементы массива, постепенно собирая элементы пути. А можно выбрать одной функцией значения ключей элементов массива и их уже объединить:

$s = implode(' / ', array_map(function ($section) { return $section['NAME']; }, $sections));

Все гениальное - просто:)

Проверить, есть ли хоть у одного элемента массива ассоциативных массивов значение

Предположим, у нас есть массив из элементов, которые мы в дальнейшем выводим, например, в select-блоке. Нам нужно проверить - есть ли хоть один из элементов, помеченный как селект. Если нету - выводить в начале списка пустой элемент. Тут также можно было бы обойтись и двумя циклами - первый для определения, есть ли выбранный, второй - для вывода данных. Но можно сделать проще:

$selectedElement = (array_map(function ($item){
    if($item['SELECTED']){
        return 'Y';
    } else {
        return '';
    }
},$arResult['ITEMS'])=='Y') ? true : false;

Таким образом, в переменной $selectedElement будет храниться информация, есть ли выбранный элемент, или нету.

Использование ключей массива внутри функции-обработчика

Достаточно частно бывает необходимо получить на выходе связку данных из ключа массива и какого-то из параметров. Для этого, в array_map нужно передать первым массивом массив ключей, а вторым - уже сам массив:

$array = [
  'category1' => 'first category',
  'category2' => 'second category',
];
 
var_dump(array_map(function($key, $value) {
  return "{$key} => {$value}";
}, array_keys($array), $array));

Как будут еще интересные примеры - дополню :)



Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

Еще никто не комментировал данную публикацию. Будьте первыми!

Добавить комментарий

captcha

Возврат к списку