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));
Функция implode с сохранением ключей массива:
function ImplodeWithKeys($array,$glue=' | '){ if(!is_array($array)){ return $array; } else { return implode($glue,array_map(function($k, $v) { return "$k => $v"; }, array_keys($array), $array)); } }
Как будут еще интересные примеры - дополню :)
Разработка сайта
Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...
Сопровождение сайта
Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение
Работы по сайту
Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.