taurus2790
@taurus2790
Я не программер я только учусъ

Как составить массив категорий товаров с учётом вложенности?

Доброго времени суток друзья. Я столкнулся с проблемой, которую не хватает мозгов решить.

Суть вопроса. Получаю список категорий с максимальной вложенностью 3.

use Bitrix\Iblock\Model\Section;

$sections = Section::compileEntityByIblock(1)::getList([
    'select' => ['ID' , 'NAME' , 'PICTURE' , 'DEPTH_LEVEL' , 'CODE' , 'UF_LINKS'],
    'filter' => ["IBLOCK_ID" => 1, "ACTIVE" => "Y", "GLOBAL_ACTIVE" => "Y"],
])->fetchAll();


В результате имею массив вида
Массив
array (size=187)
  0 => 
    array (size=6)
      'ID' => string '3' (length=1)
      'NAME' => string 'Категория 1' (length=18)
      'PICTURE' => string '955' (length=3)
      'DEPTH_LEVEL' => string '1' (length=1)
  1 => 
    array (size=6)
      'ID' => string '6' (length=1)
      'NAME' => string 'Категория 1-1' (length=41)
      'PICTURE' => string '945' (length=3)
      'DEPTH_LEVEL' => string '2' (length=1)
  2 => 
    array (size=6)
      'ID' => string '7' (length=1)
      'NAME' => string 'Категория 1-2' (length=43)
      'PICTURE' => string '946' (length=3)
      'DEPTH_LEVEL' => string '2' (length=1)
  3 => 
    array (size=6)
      'ID' => string '8' (length=1)
      'NAME' => string 'Категория 2' (length=45)
      'PICTURE' => string '956' (length=3)
      'DEPTH_LEVEL' => string '1' (length=1)
  4 => 
    array (size=6)
      'ID' => string '9' (length=1)
      'NAME' => string 'Категория 2-1' (length=41)
      'PICTURE' => string '957' (length=3)
      'DEPTH_LEVEL' => string '2' (length=1)
      'UF_LINKS' => boolean false
  5 => 
    array (size=6)
      'ID' => string '10' (length=2)
      'NAME' => string 'Категория 2-1-1' (length=57)
      'PICTURE' => string '958' (length=3)
      'DEPTH_LEVEL' => string '3' (length=1)
      'UF_LINKS' => boolean false
  6 => 
    array (size=6)
      'ID' => string '11' (length=2)
      'NAME' => string 'Категория 2-1-2' (length=56)
      'PICTURE' => string '959' (length=3)
      'DEPTH_LEVEL' => string '3' (length=1)



И теперь ума не приложу как такой массив вывести в виде списка или сложить массив по другому чтобы просто проверять есть дочерние и если есть то форечем пробежаться.

Буду благодарен за помощ
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
@vyrkmod
Пишу на php. И не стыдно.
Что-то вроде
$prevDepth = 1;
foreach($arr as $item) {
    $currDepth = $item['DEPTH_LEVEL'];
    if($prevDepth < $currDepth) {
        // открываем вложенный список
    } elseif($prevDepth > $currDepth) {
        for($i = 0; $i < $prevDepth - $currDepth; $i++) {
            // закрываем вложенный список
        }
    }
    // рисуем элемент
    $prevDepth = $currDepth;
}

Хотя можно и куда красивее.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы