Олег Б.
292 сообщения
#13 лет назад
Подскажите, как быть. Имеется вот такой массив:

Array
(
=> Array
(
=> 2051
=> Уют
=> 1
=> Array
(
=> 2052
=> Аксессуары для ванной и туалета
=> 2
=> Array
(
=> Array
(
=> 2053
=> Банки для ваты
=> 3
)

)

)

)

=> Array
(
=> 1878
=> Красота и здоровье
=> 1
=> Array
(
=> 1917
=> Средства личной гигиены
=> 2
=> Array
(
=> Array
(
=> 1918
=> Вата, ватные диски
=> 3
)

)

)

)

=> Array
(
=> 1815
=> Дом
=> 1
=> Array
(
=> 1843
=> Для хранения и подачи пищи
=> 2
=> Array
(
=> Array
(
=> 1846
=> Наборы для специй
=> 3
)

)

)

)

=> Array
(
=> 1815
=> Дом
=> 1
=> Array
(
=> 1843
=> Для хранения и подачи пищи
=> 2
=> Array
(
=> Array
(
=> 1844
=> Банки для сыпучих продуктов
=> 3
)

)

)

)

)

У последних 2х - "второй уровень", а точней ID совпадают. Как мне запихнуть значение третьего уровня из четвертого элемента, в третий элемент? Извиняюсь за сумбурность формулировки..
Кирилл Е.
2817 сообщений
#13 лет назад
Рекурсивно проходить по массиву заполняя $map теми ID которые встречаются, и делать ссылку на текущий элемент.
если родитель уже есть в карте - берем за родителя ссылку $map и пишем текущий элемент не туда где находимся - а по ссылке.

А вообще, по правильному, нужно формировать массив так:


Array(
id_1 => array(
id => id_1,
name => some_name,
parent => 0),
id_2 => array(
id => id_2,
name => some_name,
parent => id_1),
id_3 => array(
id => id_2,
name => some_name,
parent => id_2),

)

)


По быстрому показал аналогию вашему 3-х этажному массиву.

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