Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как получить категории?

00 голосов
3
Помогите решить проблему:
Делаю выборку из иблока, получаю товары, нужно построить дерево категорий для этих товаров.
Сначала получаю массив с категориями третьего уровня, в которых лежат товары и удаляю дубли:
Код
while($arSections=$dbItems->GetNext()):
   $arISection[]=$arSections['IBLOCK_SECTION_ID'];
endwhile;
$arISection=array_unique($arISection);
Потом получаю все остальные категории (второй и первый уровень:
Код
foreach($arISection as $id):
   $Res3=CIBlockSection::GetByID($id);
   $arRes3=$Res3->GetNext();
   $arSection3=Array("ID"=>$arRes3['ID'],"NAME"=>$arRes3['NAME']);
   $Res2=CIBlockSection::GetByID($arRes3['IBLOCK_SECTION_ID']);
   $arRes2=$Res2->GetNext();
   $arSection2=Array("ID"=>$arRes2['ID'],"NAME"=>$arRes2['NAME']);
   $arSection2['PARENT'][]=$arSection3;
   $Res1=CIBlockSection::GetByID($arRes2['IBLOCK_SECTION_ID']);
   $arRes1=$Res1->GetNext();
   $arSection1=Array("ID"=>$arRes1['ID'],"NAME"=>$arRes1['NAME'],"PARENT"=>$arSection2);
   $arNavSection[]=$arSection1;
endforeach; 
И в $arNavSection я уже получаю что-то вроде:

Код
Array
(
    [0] => Array
        (
            [ID] => 2051
            [NAME] => Уют
            [PARENT] => Array
                (
                    [ID] => 2052
                    [NAME] => Аксессуары для ванной и туалета
                    [PARENT] => Array
                        (
                            [0] => Array
                       (
                       [ID] => 2053
                       [NAME] => Банки для ваты
                       )
                        )
                )
        )
    [1] => Array
        (
            [ID] => 1878
            [NAME] => Красота и здоровье
            [PARENT] => Array
                (
                    [ID] => 1917
                    [NAME] => Средства личной гигиены
                    [PARENT] => Array
                        (
                            [0] => Array
                       (
                       [ID] => 1918
                       [NAME] => Вата, ватные диски                     
                       )
                        )
                )
        )
    [2] => Array
        (
            [ID] => 1815
            [NAME] => Дом
            [PARENT] => Array
                (
                    [ID] => 1843
                    [NAME] => Для хранения и подачи пищи
                    [PARENT] => Array
                        (
                            [0] => Array
                      (
                      [ID] => 1846
 
спросил 11 Окт, 13 от Snezhka (2,240 баллов)

3 Ответы

00 голосов
up
ответил 30 Окт, 13 от Snezhka (2,240 баллов)
00 голосов
если например ключами массива следать айдишники секций то дублей не будет...
например $arNavSection[$arSection1['ID']]=$arSection1; вместо $arNavSection[]=$arSection1;
ответил 04 Фев, 14 от Hax (1,100 баллов)
00 голосов
да, только я сделал через второй уровень сначала.
ответил 24 Май, 14 от Snezhka (2,240 баллов)