Магия array_map

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));
        }
    }

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

Количество показов: 2104
07.02.2019

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

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

Разработка сайта

Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...

Сопровождение сайта

Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение

Работы по сайту

Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.