Переход по неограниченному массиву

DenVeroid

Новичок
Переход по неограниченному массиву

Пытаюсь сделать неограниченное количество разделов, но пока непоучается, почемуто выводиться всё сразу, а нужно чтобы изначально выводился список который имеет "parent" нулевой, а поле перехода по ссылке выподала ветка принадлежащяя разделу по которому был переход, все остальные должны закрытые

вот сам код

PHP:
$cat_array=array(
array('id'=>1,'parent'=>0,'name'=>'name1'),
array('id'=>2,'parent'=>0,'name'=>'name2'),
array('id'=>3,'parent'=>0,'name'=>'name3'),
array('id'=>4,'parent'=>1,'name'=>'name4'),
array('id'=>5,'parent'=>1,'name'=>'name5'),
array('id'=>6,'parent'=>1,'name'=>'name6'),
array('id'=>7,'parent'=>4,'name'=>'name7'),
array('id'=>8,'parent'=>4,'name'=>'name8'),
array('id'=>9,'parent'=>5,'name'=>'name9'),
array('id'=>10,'parent'=>6,'name'=>'name10'),
array('id'=>11,'parent'=>6,'name'=>'name11'),
array('id'=>12,'parent'=>2,'name'=>'name12'),
array('id'=>13,'parent'=>2,'name'=>'name13'),
array('id'=>14,'parent'=>3,'name'=>'name14'),
array('id'=>15,'parent'=>3,'name'=>'name15'),
array('id'=>16,'parent'=>15,'name'=>'name15'),
array('id'=>17,'parent'=>16,'name'=>'name17'),
array('id'=>18,'parent'=>17,'name'=>'name18')
);


function level($end){

   for($l=1; $l<$end; $l++){$parse .= '.';}

  return $parse;
}


function ShowTree($CatID,$level='0',$cat_array) {

  for($i = 0; $i < count($cat_array); $i++){

   if($CatID == $cat_array[$i]['parent']){
    $out .= level($level)."<b><A HREF="."?ID=".$cat_array[$i]['id'].">".$cat_array[$i]['name']."</A></b><br>";
    $out .= ShowTree($cat_array[$i]['id'],$level+3,$cat_array);

   }else{
     $out .= level($level)."<A HREF="."?ID=".$cat_array[$i]['id'].">".$cat_array[$i]['name']."</A><br>";
   }
  }
      return $out;
 }

   if($_GET['ID'] == ''){$CatID=0;}else{$CatID=$_GET['ID'];}

   echo ShowTree($CatID,0,$cat_array);

$cat_array - массив разделов
id - id раздела
parent - id принадлежащий родителя
name - название раздела
 

Renny

Новичок
Покажи пример работы, что при каких параметрах выводит.
 

DenVeroid

Новичок
Автор оригинала: Renny
Покажи пример работы, что при каких параметрах выводит.
я приведу неполностью результат работы, а то слишком большой получается

PHP:
name1
..name1
..name2
..name3
..name4
.....name1
.....name2
.....name3
.....name4
.....name5
.....name6
.....name7
........name1
........name2
........name3
........name4
........name5
........name6
........name7
........name8
........name9
........name10
........name11
........name12
........name13
........name14
........name15
........name15
........name17
........name18
.....name8
........name1
........name2
........name3
........name4
........name5
........name6
........name7
........name8
........name9
........name10
........name11
........name12
........name13
........name14
........name15
........name15
........name17
........name18
.....name9
.....name10
.....name11
.....name12
.....name13
.....name14
.....name15
.....name15
.....name17
.....name18
..name5
.....name1
.....name2
.....name3
.....name4
.....name5
.....name6
.....name7
.....name8
.....name9
........name1
........name2
отсюда видно что список повторяется несколько раз, и если не указывать параметры, то выводиться должны только основные разделы(которые содержут "parent" нулевой), а при переходе по ссылке должна открываться ветка, только то ветка которая принадлежит разделу по которому был переход


Тоесть должно получиться точно также как например на сайте
http://www.web-zona.ru/products/wzb/
левое меню разделов

Возможно ли так, только не применяя БД?
 

Renny

Новичок
Объясни простыми словами что ты хочешь?

Ты хочешь что бы при вызове функции она выдавала тебе только 3 имени, те у которых parent=0?
 

DenVeroid

Новичок
Renny, извини мож что нетак разясняю, мне нужно при выводе функции такого вида
echo ShowTree(0,0,$cat_array);

я должен увидеть результат только тех разделов у которых parent равен нулю, в данном случии я должен увидеть разделы
name1
name2
name3

при выводе функции
echo ShowTree(1,0,$cat_array);
я должен увидеть тоже самое но уже с открытой веткой для раздела у которого parent равен единице
 

itprog

Cruftsman
DenVeroid
Я такое делал, могу выложить, но там каша (mvc + php5 + mysqli + дампа БД нет)
 

DenVeroid

Новичок
itprog, да нет спасибо, через БД не нужно, я делалю так чтобы можно обойтись только чисто на PHP, вобще конечно все данные о разделах храняться у меня именно в БД (MySQL) от куда я перегоняю в массив, а дальше мя хочю только средсвами самого PHP сделать, дабы меньше запросов было к БД, но пока с этим у меня проблемка
 

Юзер

Новичок
могу тебе дать несколько советов, по поводу твоей задумки..
1. Использование "echo" в функции не есть хорошо.
2. Обязательно возникнут проблемы с дизайном сайта при использовнии много уровневых подразделов.
 

Renny

Новичок
Автор оригинала: DenVeroid
Renny, извини мож что нетак разясняю, мне нужно при выводе функции такого вида
echo ShowTree(0,0,$cat_array);

я должен увидеть результат только тех разделов у которых parent равен нулю, в данном случии я должен увидеть разделы
name1
name2
name3

при выводе функции
echo ShowTree(1,0,$cat_array);
я должен увидеть тоже самое но уже с открытой веткой для раздела у которого parent равен единице
Замечательно, что-то разъясняется :) Так что выдает твоя функция При echo ShowTree(0,0,$cat_array); ??

-~{}~ 04.01.06 01:55:

И еще я думаю тебе будет проще, если ты нарисуешь Блок-Схему ( знаешь что это такое? ) того что твоя функция делает.
 

DenVeroid

Новичок
Renny
Так что выдает твоя функция При echo ShowTree(0,0,$cat_array); ??
мне нужно чтобы функция выводила разделы, в зависимости от перевого параметра функции "ShowTree"

к примеру если мы укажем её ноль, то она должна вывести не всё дерево разделов а только те разделы которые имеют parent=0
тоесть так:

name1
name2
name3

если мы уакжем в место нуля к примеру "1" то должно вывестись:

name1
..name4
..name5
..name6
name2
name3


получиться должно точно также как давал выше ссылку на сайт, там видно как выводиться левое меню


И еще я думаю тебе будет проще, если ты нарисуешь Блок-Схему ( знаешь что это такое? ) того что твоя функция делает.
Блок-Схему - тоесть это правельно сформирован массив ?
 

Renny

Новичок
Блок - схема, это ( если простыми словами ) схематичный рисунок что и как у тебя делается, со стрелочками, что после чего и при каких условиях происходит.
 
Сверху