Newer
Older
/**
* Сгруппировать подразедлы в верхние разделы меню
* Дочерние элементы поместить в массив родителя с ключом submenu *
* Значение под ключом depth определяет уровень раздела *
* Массив $aMenu всегда начинается с элемента depth = 0,
* все последующие элементы с depth = 1 являются его дочерними *
* элементами * *
* @param array $aMenu * *
* @return array
function prepareMenu(array $aMenu): array {
$result = [];
foreach ($aMenu as $arr) {
if ($arr['depth'] === 0) {
$result[] = array(
'name' => $arr['name'],
'depth' => $arr['depth'],
'submenu' => []
);
continue;
}
$result[array_key_last($result)]['submenu'][] = array(
'name' => $arr['name'],
'depth' => $arr['depth'],
);
}
return $result;
/** Выходные данные:
* $aMenu = [
* [
* 'name' => 'Смартфоны и гаджеты',
* 'depth' => 0,
* 'submenu' => [
* ['name' => 'Смартфоны, мобильные телефоны','depth' => 1,],
* ['name' => 'Планшеты','depth' => 1,],
* ['name' => 'Наушники и гарнитуры','depth' => 1,]
* ,]
* ,],
* [
* 'name' => 'Компьютеры и ноутбуки',
* 'depth' => 0,
* 'submenu' => [
* ['name' => 'Ноутбуки и аксессуары','depth' => 1,],
* ['name' => 'Компьютеры и мониторы','depth' => 1,],
* ['name' => 'Компьютерные комплектующие','depth' => 1,],]],
* [
* 'name' => 'Техника для дома',
* 'depth' => 0,
* 'submenu' => [
* ['name' => 'Техника для уборки','depth' => 1,],
* ['name' => 'Товары для ухода за одеждой','depth' => 1,],
* ['name' => 'Аксессуары для техники','depth' => 1,],]],
* [
* 'name' => 'Товары для дома и кухни','depth' => 0,
* 'submenu' => [
* ['name' => 'Посуда','depth' => 1,],]], ];
*/
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php
$aMenu = [
['name' => 'Смартфоны и гаджеты','depth' => 0,],
['name' => 'Смартфоны, мобильные телефоны','depth' => 1,],
['name' => 'Планшеты','depth' => 1,],
['name' => 'Наушники и гарнитуры','depth' => 1,],
['name' => 'Компьютеры и ноутбуки','depth' => 0,],
['name' => 'Ноутбуки и аксессуары','depth' => 1,],
['name' => 'Компьютеры и мониторы','depth' => 1,],
['name' => 'Компьютерные комплектующие','depth' => 1,],
['name' => 'Техника для дома','depth' => 0,],
['name' => 'Техника для уборки','depth' => 1,],
['name' => 'Товары для ухода за одеждой','depth' => 1,],
['name' => 'Аксессуары для техники','depth' => 1,],
['name' => 'Товары для дома и кухни','depth' => 0,],
['name' => 'Посуда','depth' => 1,],
];
print_r(prepareMenu($aMenu));