Форум программистов, компьютерный форум, киберфорум
Наши страницы

PHP

Войти
Регистрация
Восстановить пароль
 
Dimish
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 4
#1

Как полностью вывести дерево? - PHP

12.03.2013, 15:41. Просмотров 709. Ответов 6
Метки нет (Все метки)

Добрый день!
Не удается в виде вывести дерево категорий. Отправил в него массив такого вида:

SQL
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Array
(
    [0] => Array
        (
            [id] => 1
            [parent] => 0
            [title] => Категория-1
            [title_en] => 
            [c] => Array
                (
                    [0] => Array
                        (
                            [id] => 5
                            [parent] => 1
                            [title] => Категория-1.1
                            [title_en] =>
                            [c] => Array
                                (
                                )
 
                        )
 
                    [1] => Array
                        (
                            [id] => 6
                            [parent] => 1
                            [title] => Категория-1.2
                            [title_en] =>
                            [c] => Array
                                (
                                )
 
                        )
 
                )
 
        )
 
    [1] => Array
        (
            [id] => 2
            [parent] => 0
            [title] => Категория-2
            [title_en] =>
            [c] => Array
                (
                    [0] => Array
                        (
                            [id] => 9
                            [parent] => 2
                            [title] => Категория-2.1
                            [title_en] =>
                            [c] => Array
                                (
                                )
 
                        )
 
                    [1] => Array
                        (
                            [id] => 10
                            [parent] => 2
                            [title] => Категория-2.2
                            [title_en] =>
                            [c] => Array
                                (
                                )
 
                        )
 
                )
 
        )
 
)
в виде вызываю функцию:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
    function showTree( &$submenu )
    {
        $html =  '<ul>';
        foreach( $submenu as &$item ){
            $html .=  '<li><a href="'.$item['title_en'].'">'.$item['title'].'</a>';
            if( ! empty($item['parent']) )
                $html .=  showTree( $item['parent']);
            $html .=  '</li>';
        }
        $html .=  '</ul>';
        return $html;
    }
в итоге, естественно, выводятся только "Категория-1" и "Категория-2"... Понимаю, что условие перед рекурсией не верно, а вот как его изменить, что бы отправить "внутрь" - понять не могу. Банально, но засада - выручайте плиз
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2013, 15:41
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как полностью вывести дерево? (PHP):

Дайте пожалуйста идею, как вывести дерево - PHP
Не получается понять, как правильно выводить. Есть массив: $ref, где $ - порядковый номер набора значений, $b - сами значения. В нём...

Браузерная игра. Как нарисовать дерево задач - PHP
Добрый день. Не знал куда запихнуть тему, решил в php, так как близко по теме. Хочу сделать первую в своей жизни браузерную игру....

Вывести дерево каталогов - PHP
Есть идея, вызванная необходимостью. Можно ли с использованием PHP(а не javascript т.к. он не умеет работать с фалами, на сколько я знаю)...

Как построит дерево вида - PHP
Добрый день. Подскажите пожалуйста как построить дерево категорий 3-х уровней. Построить не с помощью тегов &lt;ul&gt;&lt;/ul&gt;, а с помощью...

Как построить дерево 3-х уровней - PHP
Добрый вечер. Как построить дерево 3-х уровней с помощью форм и в ней тега &lt;select name=&quot;catalog&quot;&gt; &lt;option value=&quot;1&quot;&gt;&lt;/option&gt; ...

Как реализовать дерево файлов определенной папки удаленной машины? - PHP
Есть код, который отображает дерево каталогов, он может отобразить дерево удаленного сайта либо локальной папки где исполняется код....

6
Vovan-VE
13148 / 6531 / 188
Регистрация: 10.01.2008
Сообщений: 15,071
12.03.2013, 16:00 #2
Цитата Сообщение от Dimish Посмотреть сообщение
PHP
7
8
if( ! empty($item['parent']) )
    $html .= showTree( $item['parent']);
Почему это 'parent', когда должен быть 'c'?
PHP
7
8
if (!empty($item['c']))
    $html .= showTree($item['c']);
0
Dimish
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 4
12.03.2013, 16:26  [ТС] #3
c "c" тоже самое.. только родители
0
Vovan-VE
13148 / 6531 / 188
Регистрация: 10.01.2008
Сообщений: 15,071
12.03.2013, 16:39 #4
Всё работает. Включите все ошибки и ищите опечатки.
0
Dimish
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 4
12.03.2013, 17:35  [ТС] #5
Ошибки включены - их нет... а вот заметил, что в контроллере параметр болтается:
PHP
1
$this->tree_lib->get(0);
и аот подозрение, что именно он и тянет только родителей. Буду его проверять ...

Добавлено через 48 минут
Передаваемый в функцию 'get' параметр '0' действительно влияет на вывод детей, но в этом "состоянии" должен выводить всех, что собственно и происходит глядя на приходящий в вид массив ...

Цитата Сообщение от Vovan-VE Посмотреть сообщение
Всё работает.
если не лень глянуть - какой массив (структура) поступает на вывод?
0
Vovan-VE
13148 / 6531 / 188
Регистрация: 10.01.2008
Сообщений: 15,071
12.03.2013, 17:50 #6
Цитата Сообщение от Dimish Посмотреть сообщение
если не лень глянуть - какой массив (структура) поступает на вывод?
Тот самый, который Вы в самом начала давали:
$tree = ... ;
PHP
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$tree = array(
    array(
        'id'       => 1,
        'parent'   => 0,
        'title'    => "Категория-1",
        'title_en' => "",
        'c'        => array(
            array(
                'id'       => 5,
                'parent'   => 1,
                'title'    => "Категория-1.1",
                'title_en' => "",
                'c'        => array(),
            ),
            array(
                'id'       => 6,
                'parent'   => 1,
                'title'    => "Категория-1.2",
                'title_en' => "",
                'c'        => array(),
            ),
        ),
    ),
    array(
        'id'       => 2,
        'parent'   => 0,
        'title'    => "Категория-2",
        'title_en' => "",
        'c' => array(
            array(
                'id'       => 9,
                'parent'   => 2,
                'title'    => "Категория-2.1",
                'title_en' => "",
                'c'        => array(),
            ),
            array(
                'id'       => 10,
                'parent'   => 2,
                'title'    => "Категория-2.2",
                'title_en' => "",
                'c'        => array(),
            ),
        ),
    ),
);

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function showTree(&$submenu, $indent = "") {
    $next = $indent . "\t";
    $child = $next . "\t";
 
    $html = $indent . "<ul>\n";
    foreach ($submenu as &$item) {
        $html .= $next . "<li>\n" . $child
            . "<a href='" . $item['title_en'] . "'>"
            . $item['title']
            . "</a>\n"
        ;
 
        if (!empty($item['c']))
            $html .= showTree($item['c'], $child);
 
        $html .= $next . "</li>\n";
    }
    $html .= $indent . "</ul>\n";
    return $html;
}
 
echo showTree($tree);
Запускаю в консоли и вижу:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<ul>
    <li>
        <a href=''>Категория-1</a>
        <ul>
            <li>
                <a href=''>Категория-1.1</a>
            </li>
            <li>
                <a href=''>Категория-1.2</a>
            </li>
        </ul>
    </li>
    <li>
        <a href=''>Категория-2</a>
        <ul>
            <li>
                <a href=''>Категория-2.1</a>
            </li>
            <li>
                <a href=''>Категория-2.2</a>
            </li>
        </ul>
    </li>
</ul>
0
Dimish
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 4
12.03.2013, 18:11  [ТС] #7
Ну... уже и не знаю куда копать. Для полноты картины выкладываю код (может найдете время посмотреть):

контроллер:
PHP
1
2
3
$this->load->library('tree_lib');
$this->tree_lib->get(0);
$data['submenu'] = $this->tree_lib->date;
библиотека:
PHP
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
26
27
28
29
30
31
32
33
34
class Tree_lib {
 
    var $CI;
    var $date;
    
    function __construct()
    {
        $this->CI =& get_instance();
        $this->CI->load->model('Tree_model', '', TRUE);
    }
    
    public function get($id = 0)
    {
        if (is_int($id)) {
            return $this->date = $this->get_child($id);
        } 
        else
        {
            return false;
        }
    }
    
    private function get_child($id = 0)
    {
        $arr = array();
        if ($arr = $this->CI->Tree_model->get_all_child($id)) {
            foreach ($arr as $key => $val) {
                $arr[$key]['c'] = $this->get_child($val['id']);
            }
        }
        return $arr;
    }
    
}
модель:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Tree_model extends CI_Model {
 
    function Tree()
    {
        parent::__construct();
    }
    
    function get_all_child($id)
    {
        $this->db->select('*');
        $this->db->from('submenu');
        $this->db->where('parent', $id);
        $query = $this->db->get();
        return $query->result_array();
    }
 
}
ну а функция вывода была выше.
0
12.03.2013, 18:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2013, 18:11
Привет! Вот еще темы с ответами:

Как вывести дерево из двух таблиц MySQL PHP - PHP БД
Привет всем! У меня есть 2 таблицы, одна с названиями подразделений и отделов(department_table D), вторая с сотрудниками(users_table U)...

Как полностью вывести одномерный массив в Label, TextBox - VBA
как полностью вывести одномерный массив в Label, TextBox. как и куда выводить двумерный массив? в борланде было достаточно For I =...

Как вывести полностью в Hint, выходящую за пределы компонента ComboBox, строку? - C++ Builder
Доброго времени суток! Как сделать вывод длинной строки ComboBox в Hint, а чтобы короткие строки остались без подсказок? Спасибо!

Как вывести дерево каталогов? - VBA
Привет ALL! Как вывести окно с отображением дерева каталогов, подобное тому, что выводится при инсталяции программ, чтобы была...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru