powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Массив в массиве.
5 сообщений из 5, страница 1 из 1
Массив в массиве.
    #35786583
php.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Есть такая проблема.
Дан массив
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Array(
  [ 0 ] => Array(
                     [id] =>  1 ,
                     [pid] =>  0 ,
                     [level] =>  0 ,
                     [name] => Недвижимость
  [ 1 ] = > Array(
                     [id] =>  2 ,
                     [pid] =>  1 ,
                     [level] =>  1 ,
                     [name] => Дом
  [ 2 ] => Array(
                     [id] =>  3 ,
                     [pid] =>  0 ,
                     [level] =>  0 ,
                     [name] => Авто
  [ 3 ] => Array(
                     [id] =>  4 ,
                     [pid] =>  3 ,
                     [level] =>  1 ,
                     [name] => BMW      
 )

и так далее. Это наподобии построения дерева с БД по id и parent_id, только надо построить массив в виде дерева с массива. Например если в Недвижимости есть child, то к нему добавляется новый индекс ['children'] в виде массива, с аналогичными индексами. То есть массив после обработки должен иметь следующий вид:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Array(
  [ 0 ] => Array(
                     [id] =>  1 ,
                     [pid] =>  0 ,
                     [level] =>  0 ,
                     [name] => Недвижимость
                     [children] => Array(
                                                 [ 0 ] => Array(
                                                                    [id] =>  2 ,
                                                                    [pid] =>  1 ,
                                                                    [level] =>  1 ,
                                                                    [name] => Дом)
  
 [ 1 ] => Array(
                     [id] =>  3 ,
                     [pid] =>  0 ,
                     [level] =>  0 ,
                     [name] => Авто
                     [children] => Array(
                                                 [ 0 ] => Array(
                                                                   [id] =>  4 ,
                                                                   [pid] =>  3 ,
                                                                   [level] =>  1 ,
                                                                   [name] => BMW)
)
Вобщем помогите пожалуйста. Пробовал рекурсивно, но 5 раз переписывал код и толку мало, такого построения не смог добиться.....
Заранее спасибо!!!
...
Рейтинг: 0 / 0
Массив в массиве.
    #35786612
Anjey aka PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
php.net,

а вы в children не копию а ссылку помещайте, тогда можно без рекурсии в один проход


указанный ниже пример предполагает что индекс массива == id
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
foreach ($data as $key => $value) {
  if ($value['pid'] !=  0 ) {
  // строим дерево
    $data [$value ['pid']] ['children'] [$value ['id']] = &$data[$key];
  }
}

foreach ($data as $key => $value) {
  if ($value['pid'] !=  0 ) {
  // Вытираем из корня дерева все что не пренадлежит к корню (можно и не вытирать а просто при обработке проверять ифом в корне)
    unset($data[$key]);
  }
}

...
Рейтинг: 0 / 0
Массив в массиве.
    #35786617
Anjey aka PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в догонку -- "level" конечно так не получится заполнить, но вопрос в том нужен ли он, т.к. при обходе дерева вы его всегда сможете узнать ибо обходить будете имхо рекурсивно
...
Рейтинг: 0 / 0
Массив в массиве.
    #35786690
php.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anjey aka PM

Спасибо, разобрался, отличный пример!!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Массив в массиве.
    #37970397
Borodatych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
авторуказанный ниже пример предполагает что индекс массива == id
Можно ли его адаптировать если IDмассива!=ИндексуМассива?
.. предполагал, что где то можно тупо сделать +1..
Но есть одно но, в самой базе может не быть несколько записей, то есть idcat1,idcat2,idcat4.
И в массив они попадают id0,id1,id3, то есть догатки с +1 сразу провалились.
Есть ли выход в данной ситуации? или только рекурсия?
С уважением, Роман.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Массив в массиве.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]