Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Собрать массив в рекурсионной функции
Kusss  
 ۩  [x] Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1356
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 9 дней
Карма: 77




Есть "стандартное" дерево разделов
Массив с меню (отдельно), вот такой
Array
(
[7] => Array
(
[14] => Array
(
[id] => 9
[menu_id] => 14
[hide] => 0
[cat_id] => 7
)

[15] => Array
(
[id] => 10
[menu_id] => 15
[hide] => 0
[cat_id] => 7
)

)

[9] => Array
(
[16] => Array
(
[id] => 11
[menu_id] => 16
[hide] => 0
[cat_id] => 9
)

[17] => Array
(
[id] => 12
[menu_id] => 17
[hide] => 0
[cat_id] => 9
)

)

[10] => Array
(
[18] => Array
(
[id] => 13
[menu_id] => 18
[hide] => 0
[cat_id] => 10
)

)
)


Нужно собрать новое дерево (или заполнить текущее) с этими отдельными менюшками.

вот функция перебора моего дерева массива
private function build_tree($array = []) {

// $this->dish_array - массив с меню
// $this->data_menu_array - дерево разделов

if (!count($array)) {
$array = $this->data_menu_array;
$new_tree = [];
}

// разделы меню
foreach ($array AS $key=>$value){

// Если это подраздел
if (isset($value['childs'])) {
$this->build_tree($value['childs']);
} else {
// Проверить есть ли меню
if (is_array( $this->dish_array[$key] )) {

// Наше меню из этого раздела
foreach ($this->dish_array[$key] AS $id=>$val){
// тут выбираем название и другую инфу
}
}
}

}

return $new_tree;
}
Тут нет моего решения, так как я потратил много времени и все оказалось в пустую.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sg.com  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 121
Пользователь №: 42899
На форуме: 7 месяцев, 9 дней
Карма: 3




Цитата (Kusss @ 23.06.2016 - 17:50)

Есть "стандартное" дерево разделов...
Массив с меню (отдельно)...
Нужно собрать новое дерево (или заполнить текущее) с этими отдельными менюшками.
Тут нет моего решения...

и рад бы помочь, только не пойму какое решение нужно получить, - внедрить в дерево указанный массив? если да, то должно быть описание по каким правилам его внедрять, если нет то какое решение нужно?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
 ۩  Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1356
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 9 дней
Карма: 77




Именно так. Внедрить массив с позициями в "скелет" меню.

массив с меню : [id категории][id меню] = значение.
дерево, тут только id категории.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sg.com  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 121
Пользователь №: 42899
На форуме: 7 месяцев, 9 дней
Карма: 3




Массив с меню вижу, ...покажи как выглядит "фрагмент" самого дерева, - без этого можно не угадать с алгоритмом "внедрения".
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
 ۩  Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1356
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 9 дней
Карма: 77




вот так
[2] => Array
(
[id] => 2
[parent_id] => 0
[name] => Кухня
[childs] => Array
(
[10] => Array
(
[id] => 10
[parent_id] => 2
[name] => Горячее
)

[11] => Array
(
[id] => 11
[parent_id] => 2
[name] => Холодное
)

[12] => Array
(
[id] => 12
[parent_id] => 2
[name] => Мангал
[childs] => Array
(
[14] => Array
(
[id] => 14
[parent_id] => 12
[name] => Рыба
)

[15] => Array
(
[id] => 15
[parent_id] => 12
[name] => Мясо
)
)
)
)
)

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sg.com  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 121
Пользователь №: 42899
На форуме: 7 месяцев, 9 дней
Карма: 3




Этого недостаточно, еще брось "фрагмент" массива, который должен быть в итоге. Само по себе слово "внедрение" не дает четкого представления какой итог ожидается.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
 ۩  Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1356
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 9 дней
Карма: 77




вот такой должен быть результат.
[2] => Array
(
[id] => 2
[parent_id] => 0
[name] => Кухня
[childs] => Array
(
[10] => Array
(
[id] => 10
[parent_id] => 2
[name] => Горячее
[menu] => Array
(
[18] => Array
(
[id] => 13
[menu_id] => 18
[hide] => 0
[cat_id] => 10
)
)
)
[11] => Array
(
[id] => 11
[parent_id] => 2
[name] => Холодное
)

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sg.com  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 121
Пользователь №: 42899
На форуме: 7 месяцев, 9 дней
Карма: 3




Вот пожалуйста (результат проверил), что первое придумал:

$tree_menu = Array
( 2 => Array
(
'id' => 2, 'parent_id' => 0, 'name' => 'Кухня', 'childs' => Array
(
10 => Array( 'id' => 10, 'parent_id' => 2, 'name' => 'Горячее' ),
11 => Array( 'id' => 11, 'parent_id' => 2, 'name' => 'Холодное' ),
12 => Array( 'id' => 12, 'parent_id' => 2, 'name' => 'Мангал', 'childs' => Array
(
14 => Array( 'id' => 14, 'parent_id' => 12, 'name' => 'Рыба' ),
15 => Array( 'id' => 15, 'parent_id' => 12, 'name' => 'Мясо' )
)
)
)
)
);


$sub_menu = Array
(
7 => Array
(
14 => Array( 'id' => 9, 'menu_id' => 14, 'hide' => 0, 'cat_id'=> 7 ),
15 => Array( 'id' => 10, 'menu_id' => 15, 'hide' => 0, 'cat_id' => 7 )
),


9 => Array
(
16 => Array( 'id' => 11, 'menu_id' => 16, 'hide' => 0, 'cat_id' => 9 ),
17 => Array( 'id' => 12, 'menu_id' => 17, 'hide' => 0, 'cat_id' => 9 )
),


10 => Array
(
18 => Array( 'id' => 13, 'menu_id' => 18, 'hide' => 0, 'cat_id' => 10 )
)
);




foreach( $tree_menu as $key1=>$tree )
{

foreach( $tree['childs'] as $key2=>$val )
{
if( isset($sub_menu[$key2]) )
{
$tree_menu[$key1]['childs'][$key2]['menu'] = $sub_menu[$key2];
}
}
}

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
 ۩  Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1356
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 9 дней
Карма: 77




Дерево может быть бесконечной вложенности.
А меню может принадлежать любому разделу, ну на пример 2 "Кухня".
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sg.com  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 121
Пользователь №: 42899
На форуме: 7 месяцев, 9 дней
Карма: 3




Цитата (Kusss @ 26.06.2016 - 18:25)
Дерево может быть бесконечной вложенности.
А меню может принадлежать любому разделу, ну на пример 2 "Кухня".

вряд ли меню в "больше трех кликов" оправдано. Это конечно можно все реализовать, но "кому это нужно", тем более меню с бесконечной вложенность - даже звучит пугающе.

Ну если сильно нужно, что мешает создать массив алгоритмов для каждой отдельной вложенности и задавать номер алгоритма в суб_меню. Или порядок (глубина) вложенности тогда должна быть указана в суб_меню.

$tree_menu[$key1]['childs'][$key2]...['childs'][$keyN]['menu'] = $sub_menu[$key2];


Это сообщение отредактировал sg.com - 26.06.2016 - 19:59
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
 ۩  Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1356
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 9 дней
Карма: 77




Я это сделал по другому.
Просто хотелось понять, как заполнить массив перебирая разделы рекурсией.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса