Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> из одномерного массива построить дерево 
V
    Опции темы
enoff
Дата 9.11.2010, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 11
Всего: 13



Есть массив вида
Код

array
(
    0 => array(
        id => 1,
        name => "категория 1",
        parent_id => 0),
    1 => array(
        id => 2,
        name => "подкатегория 1",
        parent_id => 1),
    2 => array(
        id => 3,
        name => "категория 2",
        parent_id => 0),
    3 => array(
        id => 4,
        name => "подкатегория 1",
        parent_id => 3),
    4 => array(
        id => 5,
        name => "подкатегория 1.1",
        parent_id => 4)
);


нужно построить дерево

Код

array(
    0 => array(
        id => 1,
        name => "категория 1",
        parent_id => 0,
        level => 0,
        children => array(
            0 => array(
                id => 2,
                name => "подкатегория 1",
                parent_id => 1,
                level => 1))),
    1 => array(
        id => 3,
        name => "категория 2",
        parent_id => 0,
        level => 1,
        children => array(
            0 => array(
                id => 4,
                name => "подкатегория 1",
                parent_id => 3,
                level => 2),
            1 => array(
                id => 5,
                name => "подкатегория 1.1",
                parent_id => 4,
                level => 2)))
);


помогите, пожалуйста, мучаюсь уже который час smile 
PM MAIL ICQ Skype GTalk   Вверх
bars80080
Дата 9.11.2010, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



у вас отражены два последних элемента не по логике

            0 => array(
                id => 4,
                name => "подкатегория 1",
                parent_id => 3,
                level => 2),
            1 => array(
                id => 5,
                name => "подкатегория 1.1",
                parent_id => 4,
                level => 2)))

первый должен быть ребёнком нулевого

так же неясно как формируется level


решение стандартное - рекурсивная функция, что-то вроде:


Код

$tree = get_tree($ar, 0);
// где $ar - первоначальный массив


function get_tree($ar, $parent) {
    $out = array();
    foreach($ar as $v) {
        if($v['parent_id'] == $parent) {
            $q = get_tree($ar, $v['id']);
            if(!empty($q)) {
                $v['children'] = $q;
            }
            $out[] = $v;
        }
    }
    return $out;
}



не проверял
PM MAIL WWW   Вверх
enoff
Дата 9.11.2010, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 11
Всего: 13



level - уровень вложенности.
хотя его можно отбросить.

Цитата(bars80080 @  9.11.2010,  16:48 Найти цитируемый пост)

первый должен быть ребёнком нулевого

почему?
из исходного массива:
Код

    2 => array(
        id => 3,
        name => "категория 2",
        parent_id => 0),
    3 => array(
        id => 4,
        name => "подкатегория 1",
        parent_id => 3),

id4 - ребенок id3, id3 в свою очередь, ребенок нуля.

Спасибо огромное за код, все работает smile 
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.