Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Категории и подкатегории [5]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (5): « 1 2 3 4 [5]   

> Описание: подайте идею
_tango
Отправлено: 10 Апреля, 2010 - 23:33:42
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2010  
Откуда: Казахстан


Помог: 0 раз(а)




Вот окончательный вариант:

CODE (SQL):
скопировать код в буфер обмена
  1. $queryresult = mysql_query('SELECT id, parent_id, title FROM testcat ORDER BY parent_id, id');


PHP:
скопировать код в буфер обмена
  1. while ($row = mysql_fetch_assoc($queryresult)) {
  2.         $menu[$row['parent_id']][$row['id']] = $row['title'];
  3. }
  4.  
  5. foreach ($menu[0] as $CatId => $CatName )
  6. {
  7.  echo $CatName."<br />";
  8.  foreach ($menu[$CatId] as $ItemId => $ItemName)
  9.  {
  10.   echo $ItemName."<br />";
  11.  }
  12. }
  13.  


Хорошо иппон!!! Радость

(Отредактировано автором: 10 Апреля, 2010 - 23:34:37)

 
 Top
JustUserR
Отправлено: 11 Апреля, 2010 - 14:43:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




_tango пишет:
Вот окончательный вариант
В принципе решение неплохое но его можно универсализировать для любого уровня вложенности - сначала выбираете все корневые элементы и кладте их в хеш-массив - далее для каждого из них просматриваете дочерние элементы и если такове имеются то для значенем ключа данного элеента становится хеш-массив его дочерних элементов (Здесь также имя элемента - это ключ хеш-массива а не его значение) - а если дочернх элементов нет то устанавливаете null - таким образом поучаете полное дерево


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
_tango
Отправлено: 12 Апреля, 2010 - 14:10:28
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2010  
Откуда: Казахстан


Помог: 0 раз(а)




Извините пожалуйста, но не могли бы вы привести в пример код, ну например для трех уровней вложенности? Что бы можно было потом над ним помедитировать Закатив глазки
Очень уж тяжело, пока что, дается эта околоматематическая акробатика Радость
 
 Top
JustUserR
Отправлено: 13 Апреля, 2010 - 16:38:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




_tango Вот вам пример кода который будет упорядочивать рекурсивно массив и превращать его в дерево по идентификаторам родительских элементов - при этом он работает с произвольным уровнем вложенности
PHP:
скопировать код в буфер обмена
  1. $v_arr=array(array(ID=>"0", value=>"Zero", parent=>"-1"),array(ID=>"1", value=>"One", parent=>"0"), array(ID=>"2", value=>"Two", parent=>"0"),array(ID=>"3", value=>"Three", parent=>"1"));
  2. $v_tree=array();
  3. function built_tree($arr,&$tree,$par_id=-1)
  4.  { for($i=0;$i<count($arr);$i++)
  5.     { if($arr[$i]['parent']==$par_id)
  6.        { if(is_array($tree))
  7.           { $tree[$arr[$i]['ID']]=null; }
  8.          else { $tree=array();
  9.                 $tree[$arr[$i]['ID']]=null;
  10.               }
  11.          built_tree($arr,$tree[$arr[$i]['ID']],$arr[$i]['ID']);
  12.        }
  13.       else {}
  14.     }
  15.  }
  16. print_r($v_arr);
  17. print_r($v_tree);
  18.  


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
_tango
Отправлено: 14 Апреля, 2010 - 16:02:47
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2010  
Откуда: Казахстан


Помог: 0 раз(а)




Большое спасибо JustUserR Улыбка
 
 Top
JustUserR
Отправлено: 15 Апреля, 2010 - 13:23:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




_tango пишет:
Большое спасибо JustUserR
Используйте на здоровье Улыбка Обратите внимание что второй аргумент приведенной функции является ссылкой


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Ghost
Отправлено: 18 Января, 2011 - 19:41:35
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Здравствуйте.

Хотел бы возобновить старую тему.
У меня аналогичная "загвоздка", никак не могу найти решение.
Нужно рекурсией собрать массив из id-значений для вывода комментариев.

Вывожу часть данных из БД:

PHP:
скопировать код в буфер обмена
  1.     $res = mysqlQuery("SELECT `id`, `reply`, `text`
  2.                         FROM `tbl` ");
  3.  
  4.     // reply - родительский id
  5.  
  6.     if(mysql_num_rows($res) > 0)
  7.     {
  8.       while($row = mysql_fetch_assoc($res))
  9.       {
  10.         $tree[$row['reply']][$row['id']] = $row['text'];
  11.       }
  12.     }


Прохожусь по всему дереву:

PHP:
скопировать код в буфер обмена
  1. function ShowTree($tree, $pid=0)
  2. {
  3.   $data = array();
  4.  
  5.   foreach($tree as $id=>$root)
  6.   {
  7.     if($pid!=$id)
  8.       continue;
  9.  
  10.       if(count($root))
  11.       {
  12.         foreach($root as $key => $title)
  13.         {
  14.          // echo '<h1>'. $key .'</h1>';
  15.          
  16.          if(count($tree[$key]))
  17.            ShowTree($tree,$key);
  18.         }
  19.       }
  20.  
  21.    }
  22.  
  23.  return $data;
  24. }
  25.  
  26. $dt = ShowTree($tree);


Раскомментировать echo $key; - выводятся значения в порядке в каком нужно (несколько уровней вложенности), но дело в том, что в БД хранится не только текст, но и другие данные, которые я затем через foreach($dt ... ) хотел бы вывести из БД в нужном порядке. Простое присваивание значения $key массиву ничего не даёт - заносятся только значения первого уровня.

Подскажите, пожалуйста, возможно ли собрать в массив все идентификаторы в нужном порядке? Как это можно сделать?

Кстати, выдаётся Notice: Undefined offset: ... in ... на
CODE (htmlphp):
скопировать код в буфер обмена
  1. if(count($tree[$key])) ShowTree($tree,$key);


Прочёл про это, но как избавиться не могу придумать.

Буду очень признателен за помощь.
 
 Top
Riv3ro
Отправлено: 26 Августа, 2011 - 12:11:57
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




не хотел создавать новую тему для своего вопроса...

Перечитал полностью все, что написано в данной теме так как тоже пытаюсь реализовать категории и под категории

вот что есть

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2.  
  3. id      parent_id       name
  4. 1       0       Ванны
  5. 2       0       Мебель для Ванны
  6. 3       1       Ванны чугунные
  7. 4       1       Ванны акриловые
  8. 5       2       Столы
  9. 6       2       Вешалки
  10.  
  11.  



PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $queryresult = mysql_query('SELECT id, parent_id, name FROM testcat ORDER BY parent_id, id');
  4.        
  5.         while ($row = mysql_fetch_assoc($queryresult))
  6.         {
  7.                 $menu[$row['parent_id']][$row['id']] = $row['name'];
  8.        
  9.         }
  10.          
  11.         foreach ($menu[0] as $CatId => $CatName )
  12.         {
  13.                  echo "<li><a>$CatName</a></li>";
  14.                  
  15.                  echo "<li>";
  16.                  foreach ($menu[$CatId] as $ItemId => $ItemName)
  17.                  {
  18.                        
  19.                         echo "<p><a href='view_cat.php?cat='>&#8594; $ItemName</a></p>";
  20.                        
  21.                  }
  22.                  echo "</li>";
  23.         }
  24.  
  25.  


Получается меню, с категориями и под категориями. Но я не могу сообразить как лучше сделать теперь ссылки ?

Если в <a href='view_cat.php?cat='> подставить $CatId то будет попадать на parent_id а там есть дубли =\
 
 Top
Страниц (5): « 1 2 3 4 [5]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB