Вводные данные: имеем инфоблок с элементами, у которых заполнены ряд полей: стандартные и дополнительные свойства. При этом поле «название», как и ряд дополнительных свойств — не уникальны и многократно повторяются.
Задача: вывести уникальные названия элементов. И бонусом — вывести уникальные значения определенного свойства.
Задача может показаться сложной только на первый взгляд. Решается она с помощью метода 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 будет содержаться два поля:
Для выборки списка уникальных значений свойств подходит точно такая же конструкция:
$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>";
}
Оставить комментарий