Из массива создать дерево категорий
В базе данных типы товаров хранятся в таком виде.
Пример:
Книги / Книги - Книги является типом
Автотовары / 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 шт):
Если я вас правильно поняв, скрипт будет выглядить так:
$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);
