Из массива создать дерево категорий

В базе данных типы товаров хранятся в таком виде.
Пример:
Книги / Книги - Книги является типом
Автотовары / FM модуляторы - FM модуляторы является типом
Строительство и ремонт / Инструменты / Рубанок - Рубанок является типом

Пройдясь по массиву циклом, получилось добиться такого:

array(4) {
        ["id"]=>
        string(3) "844"
        ["name"]=>
        string(23) "Книги / Книги"
        ["rowName"]=>
        array(2) {
          [0]=>
          string(10) "Книги"
          [1]=>
          string(10) "Книги"
        }
        ["rowNameCount"]=>
        int(2)   } 

array(4) {
            ["id"]=>
            string(3) "687"
            ["name"]=>
            string(80) "Автотовары / FM модуляторы "
            ["rowName"]=>
            array(2) {
              [0]=>
              string(20) "Автотовары"
              [1]=>
              string(57) "FM модуляторы"
            }
            ["rowNameCount"]=>
            int(2)   } 

array(4) {
            ["id"]=>
            string(3) "762"
            ["name"]=>
            string(122) "Строительство и ремонт / Инструменты / Рубанок"
            ["rowName"]=>
            array(3) {
              [0]=>
              string(42) "Строительство и ремонт"
              [1]=>
              string(22) "Инструменты"
              [2]=>
              string(52) "Рубанок"
            }
            ["rowNameCount"]=>
            int(3)   }

Понимаю как вывести только конечный тип, но не могу сообразить, как их вывести, чтобы создалась такая вложенность:

Пример:
При раскрытии Книги отображаются входящие туда типы - книги, аудиокниги и т.д.
При раскрытии Автотовары отображаются входящие туда типы - FM модуляторы, автолампы и т.д.
При раскрытии Строительство и ремонт отображается подтип Инструменты, а в нем уже типы - рубанок, дрели и т.д.

Оригинальный массив:

 array(890) {
 [0]=>
  array(2) {
    ["id"]=>
    string(3) "669"
    ["name"]=>
    string(46) "Автотовары / FM модуляторы"
  }
[5]=>
  array(2) {
    ["id"]=>
    string(3) "749"
    ["name"]=>
    string(41) "Автотовары / Автолампы"
  }
[745]=>
  array(2) {
    ["id"]=>
    string(3) "586"
    ["name"]=>
    string(84) "Строительство и ремонт / Инструменты / Рубанок"
  }
    [694]=>
  array(2) {
    ["id"]=>
    string(3) "670"
    ["name"]=>
    string(80) "Строительство и ремонт / Инструменты / Дрели"
  }
[226]=>
  array(2) {
    ["id"]=>
    string(3) "844"
    ["name"]=>
    string(23) "Книги / Книги"
  } 
[225]=>
  array(2) {
    ["id"]=>
    string(3) "479"
    ["name"]=>
    string(33) "Книги / Аудиокниги"
  }
}

Ответы (1 шт):

Автор решения: UKRman

Если я вас правильно поняв, скрипт будет выглядить так:

$elements = [
    [
        'id'   =>  '669',
        'name' => 'Автотовары / FM модуляторы',
    ],
    [
        'id'   => '749',
        'name' => 'Автотовары / Автолампы',
    ],
    [
        'id'   => '586',
        'name' => 'Строительство и ремонт / Инструменты / Рубанок',
    ],
    [
        'id'   => '670',
        'name' => 'Строительство и ремонт / Инструменты / Дрели',
    ],
    [
        'id'   => '844',
        'name' => 'Книги / Книги',
    ],
    [
        'id'   => '479',
        'name' => 'Книги / Аудиокниги',
    ]
];

$map = array_map(
    function ($item) {
        $item['rowName']      = array_map(
            function ($item) {
                return trim($item);
            },
            explode('/', $item['name'])
         );
        $item['rowNameCount'] = count($item['rowName']);

        return $item;
    },
    $elements
);

var_dump($map);

Результат вывода: Результат вывода

→ Ссылка