Битрикс: вывод уникальных значений элементов инфоблока

Вводные данные: имеем инфоблок с элементами, у которых заполнены ряд полей: стандартные и дополнительные свойства. При этом поле «название», как и ряд дополнительных свойств — не уникальны и многократно повторяются.

Задача: вывести уникальные названия элементов. И бонусом — вывести уникальные значения определенного свойства.

Задача может показаться сложной только на первый взгляд. Решается она с помощью метода CIBlockElement::GetList, с которым вы наверняка уже сталкивались.

Метод имеет следующие параметры:

  • arOrder — отвечает за сортировку выборки
  • arFilter — осуществляет фильтрацию выборки
  • arGroupBy — группировка элементов
  • arNavStartParams — параметры для постраничной навигации и ограничения количества выводимых элементов
  • arSelectFields — массив возвращаемых полей элемента

Как вы понимаете вывод уникальных значений — это ни что иное, как группировка элементов, за которую отвечает параметр arGroupBy.

Выводим список уникальных названий элементов:

$arFilter = Array("IBLOCK_ID"=>$IBLOCK, "ACTIVE"=>"Y");
$arGroupBy = Array("NAME");
$res = CIBlockElement::GetList(Array("NAME"=>"ASC"), $arFilter, $arGroupBy);
while($arFields = $res->GetNext()) {
echo "<div>".$arFields['NAME']." - ".$arFields['CNT']."</div>";
}

Нюанс состоит в том, что при группировке элементов параметр arSelectFields — игнорируется.
В массиве $arFields будет содержаться два поля:

  • NAME — название элемента
  • CNT — количество сгруппированных элементов

Для выборки списка уникальных значений свойств подходит точно такая же конструкция:

$arFilter = Array("IBLOCK_ID"=>$IBLOCK, "ACTIVE"=>"Y");
$arGroupBy = Array("PROPERTY_TIME");
$res = CIBlockElement::GetList(Array("PROPERTY_TIME"=>"ASC"), $arFilter, $arGroupBy);
while($arFields = $res->GetNext()) {
echo "<div>".$arFields['PROPERTY_TIME_VALUE']." - ".$arFields['CNT']."</div>";
}

Опубликовано: 8 мая 2020 года, в рубрике «Битрикс».

Оставить комментарий

5000
  Подписаться  
Уведомление о
Поблагодарить автора статьи
Зачем это нужно