Магия array_map

9
07.02.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 будет храниться информация, есть ли выбранный элемент, или нету.

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



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


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


Комментарии

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

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

captcha

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