Задача: В каталоге, у товаров, есть свойство типа список с названием "Тип изделия" и кодом "TIP_IZDELIYA". В значения свойства внесены названия типов изделий и соответствующие значения указаны у каждого товара. Необходимо вывести товары по типам изделий.

Перебор php массива с выводом элементов по значению ключа
Чтобы реализовать вывод как на скриншоте, нужно использовать цикл и условный оператор. Открываем для редактирования шаблон catalog.section и модифицируем его следующим образом:
$previousSection = '';
foreach ($arResult['ITEMS'] as $ITEM) {
$itemType = $ITEM['PROPERTIES']['TIP_IZDELIYA']['VALUE'];
if ($itemType !== $previousSection) {
$previousSection = $itemType;
echo "<h2>$itemType</h2>";
}
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'card',
array(
'RESULT' => array(
'ITEM' => $ITEM,
'TYPE' => 'CARD',
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams
+ array('SKU_PROPS' => $arResult['SKU_PROPS'][$ITEM['IBLOCK_ID']])
),
$component,
array('HIDE_ICONS' => 'Y')
);
}
В этом примере я добавил переменную $previousSection, которая будет хранить предыдущую секцию для сравнения. Затем в цикле foreach мы проверяем текущее значение свойства с кодом "TIP_IZDELIYA" и сравниваем его с предыдущей итерацией foreach.
Если значения свойства не совпадают, мы выводим название секции (значение свойства) в теге `h2`, а затем выводим компонент bitrix:catalog.item (отвечающий за вывод конкретного товара).
Таким же образом можно перебрать товары по подразделам, если вы хотите, чтобы в разделе каталога товары отбирались по подразделам раздела.