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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите составить дерево 
:(
    Опции темы
DeamonShan
Дата 17.4.2008, 17:51 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 6



Код

function doTree($id){
global $arr;
 $res=query("select * from table where parent_id=$id");

 while ($str=fetchrow($res)){
  array_push($arrTmp,$str['element']);
  doTree($str['id']);
 }
  array_push($arr,$arrTmp);
}

doTree(0);
print_r ($arr);


в случае если из БД берется...

Это сообщение отредактировал(а) DeamonShan - 17.4.2008, 18:07
PM MAIL   Вверх
DeamonShan
Дата 17.4.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 6



не тестировал...
PM MAIL   Вверх
SelenIT
Дата 17.4.2008, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(Igor_K @  17.4.2008,  17:23 Найти цитируемый пост)
а как ее получить в таком виде?

Общий принцип примерно такой (вся соль в строке 22;).

В том примере дерево строится рекурсивной ф-цией, но можно применить подход skyboyя со ссылками...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Igor_K
Дата 18.4.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



SelenIT, Спасибо за помощь!!! Разобрался. smile 
DeamonShan, тоже спасибо, но имхо в каждой итерации делать запрос в базу данныых не хочется ;)
PM MAIL   Вверх
Igor_K
Дата 18.4.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Добавьте кто-то всем отписавшимся тут плюсики, у меня постов не хватает  smile 
спасибо!
PM MAIL   Вверх
fics
Дата 30.3.2009, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Да, из базы данных. а как ее получить в таком виде? сразу из базы и стройте, что никто рекурсией пользоваться не умеет?

кусочек из одного моего класса.  $node["level"] - дополнительное поля уровня вложенности
сразу в сессию пишу чтобы не ганять такой тяжелый скрипт
Код


public function build_tree($par) {
       $result = mysql_query("select * from categories where parentid = ".$par);
            
        while($node = mysql_fetch_array($result)) {
                  
           $record = array($node["categoryid"], $node["parentid"], $node["categoryname"],
                            $node["level"]);
                     
           $_SESSION["tree"][] = $record;                
           $this->build_tree($node["categoryid"]);
                }
            
      return true;      
  }

--------------------
Ушел на пары
PM MAIL   Вверх
Igor_K
Дата 3.5.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



fics, такой подход не очень. 100 вложений - 100 запросов. 

Опять я вернулся к этому вопросу. Тему создал по этому поводу получения данных из таблицы http://forum.vingrad.ru/forum/topic-257734.html

Вернулся к этому вопросу спустя год, не довел тогда роботу до конца.
PM MAIL   Вверх
MoLeX
Дата 4.5.2009, 05:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(Igor_K @  3.5.2009,  15:52 Найти цитируемый пост)
00 вложений - 100 запросов.

нечего страшного. можно же запускать кроном отдельный скрипт и писать результат в файл который потом будет линковаться к сайту.


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
LittleFuntik
  Дата 16.6.2009, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 8.8.2007
Где: Украина, Чернигов

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



Вот держи мое решениеСпецыятельно для твоего случая!!!
И всего-лишь ОДИН ЗАПРОС к БД

Это сообщение отредактировал(а) MoLeX - 16.6.2009, 05:51
PM MAIL WWW   Вверх
capitan
Дата 11.9.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Недавно как раз работал с деревом каталога. Из всех вариантов выбрал, как считаю, самый оптимальный. 
"Дерево каталогов NESTED SETS (вложенные множества) и управление им "
http://www.getinfo.ru/article610.html

Все остальные варианты хороши на маленьких объёмах. При польших объёмах, скрипты еле ворочаются.
PM MAIL WWW ICQ   Вверх
deperoff
Дата 12.2.2012, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

$result=mysql_query("SELECT id, parent_id, title FROM tree");
$cats = array();
while($cat =  mysql_fetch_assoc($result))
        $cats[$cat['parent_id']][] =  $cat;
 
function  build_tree($cats,$parent_id){
if(is_array($cats) and count($cats[$parent_id])>0){
$tree = '<ul>';
 foreach($cats[$parent_id] as $cat){
  $tree .= '<li>'.$cat['title'];
 $tree .=  build_tree($cats,$cat['id']);
  $tree .= '</li>';         
 }
 $tree .= '</ul>';
  } 
  else return null;          
  return $tree; 
}
echo build_tree($cats,0); // :)))

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


Новичок



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

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



Цитата(Igor_K @ 17.4.2008,  17:23)
Цитата(SelenIT @  17.4.2008,  00:29 Найти цитируемый пост)
Кстати, если эта структура берется из базы, можно сразу получать ее в таком виде.


Да, из базы данных. а как ее получить в таком виде?
и мне это интересно!!!
PM MAIL WWW   Вверх
Genn
Дата 26.8.2012, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.12.2007
Где: Тамбов

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



эта структура таблицы легко реализуется

id
id_parent
name

потом foreach и всех делов
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.2008 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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