Я хочу создать многомерный массив меню у меня есть одномерный массив меню, который получается из БД.
В нем есть такие поля: "id ", "parent_id", "title".
На время разработки я упростил немного массив и убрал поле "url".
Вся проблема в том что я не могу перезаписать массив который передается как параметр в функцию, а могу только сделать дубликат этого массива, но это мне не подходит.
Вот отрывок кода который не отрабатывает как я хочу. Нужно чтобы $this->menu массив изменился (чтобы туда для каждого элемента добавился ключ "lavel" с определенным значением) в результате отработки функции function buildMenu() в которую он передается в качестве параметра, как это сделать?
Сейчас в принте выводится старая не измененная версия массива.
<?php
class Menu{
protected $menu = [
[ 'id' => 1, 'parent_id' => 0, 'title' => 'Главная' ],
[ 'id' => 2, 'parent_id' => 0, 'title' => 'Категории' ],
[ 'id' => 3, 'parent_id' => 2, 'title' => 'Спорт' ],
[ 'id' => 4, 'parent_id' => 3, 'title' => 'Тенис' ],
[ 'id' => 5, 'parent_id' => 3, 'title' => 'Баскетбол' ],
[ 'id' => 6, 'parent_id' => 2, 'title' => 'IT' ] ,
[ 'id' => 7, 'parent_id' => 6, 'title' => 'Пограммирование' ],
[ 'id' => 8, 'parent_id' => 5, 'title' => 'Турниры' ],
[ 'id' => 9, 'parent_id' => 0, 'title' => 'Товары' ],
[ 'id' => 10, 'parent_id' => 11, 'title' => 'Компьютеры' ],
[ 'id' => 11, 'parent_id' => 9, 'title' => 'Техника' ],
[ 'id' => 12, 'parent_id' => 9, 'title' => 'Мячи' ],
];
public function __construct(){
$this->getMenu();
}
protected function getMenu(){
$this->buildMenu($this->menu);
echo('<pre>');
print_r($this->menu);
echo('</pre>');
}
protected function buildMenu($menu, $pid = 0, $level = 0) {
foreach ($menu as $item) {
if($item['parent_id'] == $pid){
$item['level'] = $level;
$this->buildMenu($menu, $item['id'], $level + 1);
}
}
}
}
new Menu();
Напомню что мне нужно сделать именно тем методом которым я описал , я знаю что можно создать новый массив и скопировать туда все значения или
даже такprotected function buildMenu($menu, $pid = 0, $level = 0) {
foreach ($menu as $i=>$item) {
if($item['parent_id'] == $pid){
$this->menu[$i]['level'] = $level;
$this->buildMenu($menu, $item['id'], $level + 1);
}
}
}
Тут я описал так сказать надуманную задачу, чтобы не приводить весь код который у меня есть тут и дабы узнать возможно ли сделать то что я хочу