ksnk, блииин, не может быть что всё так просто )) но радость была короткой
вот при таком коде, результат правильный, но как только добавляю ещё один уровень вложенности, всё ломается
| Код | function build_tree($category, $parent = 0, $level = 0, $path = '') { if(is_array($category) AND count($category[$parent]) > 0) { foreach($category[$parent] as $categ) { $padd = $level * 20; echo '<div style="padding-left:'.$padd.'px;">'.$path.$categ['position'].'. '.$categ['title'].'</div>'; ($level == 0 ? $path_level = 1 : $path_level = $level); build_tree($category, $categ['id'], $level + 1, $path.$path_level.'.'); } } }
|
если к начальному массиву добавить это
| Код | $category[7][] = array('id' => 10, 'position' => 1, 'title' => 'первая - первая - вторая - первая - первая'); $category[7][] = array('id' => 11, 'position' => 2, 'title' => 'первая - первая - вторая - первая - вторая');
|
результат будет такой
| Код | 1. первая 1.1. первая - первая 1.1.1. первая - первая - первая 1.1.2. первая - первая - вторая 1.1.2.1. первая - первая - вторая - первая 1.1.2.3.1. первая - первая - вторая - первая - первая 1.1.2.3.2. первая - первая - вторая - первая - вторая 1.1.2.2. первая - первая - вторая - вторая 1.2. первая - вторая 1.3. первая - третья 2. вторая
|
нутром понимаю что дело тут в параметре position который отдельно вставляется, а должен тоже идти с путем как-то, вот сижу смотрю на код и вижу фигу ((
а и ещё вот вижу что проблема немного глубже, сейчас структура легкая, а если дерево усложнить и добавить веток то проблема нумерации встанет более явно, сейчас она по порядку идет ветвление и поэтому примерно даже работает, на более низких только заметно, а если взять массив такой
| Код | $category[0][] = array('id' => 1, 'position' => 1, 'title' => 'первая'); $category[1][] = array('id' => 3, 'position' => 1, 'title' => 'первая - первая'); $category[3][] = array('id' => 6, 'position' => 1, 'title' => 'первая - первая - первая'); $category[9][] = array('id' => 7, 'position' => 1, 'title' => 'первая - первая - вторая - первая'); $category[0][] = array('id' => 2, 'position' => 2, 'title' => 'вторая'); $category[1][] = array('id' => 4, 'position' => 2, 'title' => 'первая - вторая'); $category[9][] = array('id' => 8, 'position' => 2, 'title' => 'первая - первая - вторая - вторая'); $category[3][] = array('id' => 9, 'position' => 2, 'title' => 'первая - первая - вторая'); $category[1][] = array('id' => 5, 'position' => 3, 'title' => 'первая - третья'); $category[7][] = array('id' => 10, 'position' => 1, 'title' => 'первая - первая - вторая - первая - первая'); $category[7][] = array('id' => 11, 'position' => 2, 'title' => 'первая - первая - вторая - первая - вторая'); $category[6][] = array('id' => 12, 'position' => 1, 'title' => 'первая - первая - первая - первая'); $category[6][] = array('id' => 13, 'position' => 2, 'title' => 'первая - первая - первая - вторая'); $category[6][] = array('id' => 14, 'position' => 3, 'title' => 'первая - первая - первая - третья'); $category[10][] = array('id' => 15, 'position' => 1, 'title' => 'первая - первая - вторая - первая - первая - первая');
|
то результат будет уже вот такой
| Код | 1. первая 1.1. первая - первая 1.1.1. первая - первая - первая 1.1.2.1. первая - первая - первая - первая 1.1.2.2. первая - первая - первая - вторая 1.1.2.3. первая - первая - первая - третья 1.1.2. первая - первая - вторая 1.1.2.1. первая - первая - вторая - первая 1.1.2.3.1. первая - первая - вторая - первая - первая 1.1.2.3.4.1. первая - первая - вторая - первая - первая - первая 1.1.2.3.2. первая - первая - вторая - первая - вторая 1.1.2.2. первая - первая - вторая - вторая 1.2. первая - вторая 1.3. первая - третья 2. вторая
|
Добавлено через 7 минут и 5 секунд MoLeX, что-то мне не нравится nested sets из-за лишних данных в базе, в данном коде только id да parent_id
единственная проблема с красивую нумерацию построить |