Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » списки

Ответить
Настройки темы
списки

Аватара для slaine

Ветеран


Сообщения: 675
Благодарности: 8


Конфигурация

Профиль | Отправить PM | Цитировать


Crf;bnt как мне вывести эти данные:


CODE
Код: Выделить весь код
id nam pid
----------
1  ass   0
2  loop  1
3  zxx   0
4  flip  2
в такую структуру:
вернее, как организовать отступы?

Код: Выделить весь код
ass 
	loop
		  flip
zxx

-------
живодёр - практик


Отправлено: 23:31, 25-12-2005

 

Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


slaine
я честно говоря не понял, что нужно
Отступы где?? чтобы с отступами выводилась на экран?? или что??

-------
Fortes fortuna adiuvat


Отправлено: 01:02, 26-12-2005 | #2



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

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


Аватара для slaine

Ветеран


Сообщения: 675
Благодарности: 8

Профиль | Отправить PM | Цитировать


vadimiron ass и zxx разделы, loop и flip - подразделы.
Как мне вывести эти разделы в таком виде:

Код: Выделить весь код
ass 
	loop
		  flip
zxx

-------
живодёр - практик


Отправлено: 03:14, 26-12-2005 | #3


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


slaine
Я тут посидел-подумал-пописал, конечно можно написать проше, но мы же не ищем простых путей
Такая структура похожа на смесь деревьев и хеша, поэтому попахивает рекурсивностью
здесь два класса, Node и Hash. Node это отдельные элементы со всеми своими детьми, Hash-это система управления всем этим делом
Node: num-уникальный идентификатор внутри Hash-а, name-имя,children-массив со всеми детками
Hash: table-массив с Node-ами (по сути только с теми, у кого предка нет, все остальные элементы лежат в этих самых элементах, которые находятся на уровне 0(то есть без предка)), counter-счётчик, чтобы определять num для каждого Node

функции:
new_node-для добавления новых Node-ов в Hash, в качестве параметров принимает имя добавляемого и номер его отца, если есть отец
find_node-для поиска Node-а по его имени
show_hash-вроде и так понятно
Вот код:
PHP код: Выделить весь код

class Node
{
    
public $name;
    
public $children;
    
public $num;
    function 
__construct($name,$num)
    {
        
$this->name=$name;
        
$this->children=array();
        
$this->num=$num;
    }
    function 
new_child($child_node)
    {
        
$this->children[]=$child_node;
    }
}
class 
Hash
{
    
public $table;
    
private $counter;
    function 
__construct()
    {
        
$this->table=array();
        
$this->counter=-1;
    }
    function 
new_node($name,$parent_num=FALSE)
    {
        
$this->counter++;
        
$new_node=new Node($name,$this->counter);
        if(
$parent_num===FALSE$this->table[]=$new_node;
        else
        {
            
self::set_child($new_node,$parent_num);
        }
    }
    
private function set_child($child,$parent_num,$table=FALSE)
    {
        if(
$table===FALSE$table=$this->table;
        foreach(
$table as $k=>$v)
        {
            if(
$v->num==$parent_num)
            {
                
$table[$k]->new_child($child);
                return 
TRUE;
            }
            if(!empty(
$v->children))
            {
                if(
self::set_child($child,$parent_num,$v->children)) return TRUE;
                else return 
FALSE;
            }
        }
    }
    function 
find_node($name,$table=FALSE)
    {
        if(
$table==FALSE$table=$this->table;
        foreach(
$table as $v)
        {
            if(
$v->name==$name) return $v->num;
            if(!empty(
$v->children))
            {
                
$ret=self::find_node($name,$v->children);
                if(
$ret) return $ret;
                else return 
FALSE;
            }
        }
    }
    function 
show_hash($table=FALSE,$level=-1)
    {
        if(
$table===FALSE$table=$this->table;
        foreach(
$table as $k=>$v)
        {
            
$level++;
            echo 
str_repeat("-",$level).$v->name."<br>";
            if(!empty(
$v->children))
            {
                
self::show_hash($v->children,$level);
            }
            
$level--;
        }
    }


А вот пример применения:
PHP код: Выделить весь код

$hash=new Hash();
 
$hash->new_node("ass");
$hash->new_node("loop",$hash->find_node("ass"));
$hash->new_node("flip",$hash->find_node("loop"));
$hash->new_node("zxx");
$hash->new_node("flip2",$hash->find_node("loop"));
$hash->new_node("lalala",$hash->find_node("flip"));
 
$hash->show_hash(); 

Кончено, это не самое лучше решение , просто мне хотелось поэксперементировать
Код можно усовершенствовать, используя references, но я их не люблю

Отправлено: 01:44, 29-12-2005 | #4


Аватара для slaine

Ветеран


Сообщения: 675
Благодарности: 8

Профиль | Отправить PM | Цитировать


сенкью vadimiron!
Правда у меня неглубокие познания в классах.
Буду смотреть чо и как.
И ещё сразу хочу спросить что делает ::?

-------
живодёр - практик


Отправлено: 14:57, 19-01-2006 | #5


Аватара для XCodeR

Ветеран


Сообщения: 878
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


:: - указывает область к которой обращаемся....
к примеру PSC::dosmth() - вызывет функцию dosmth из класса PSC
хотя, я могу и ошибаться...

Отправлено: 19:08, 19-01-2006 | #6



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » списки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Delphi - C++Builder/Delphi | Ниспадающие списки Sir Z Программирование и базы данных 1 07-05-2007 13:02
C/C++ связные списки, наверно stavskiys Программирование и базы данных 2 24-01-2007 14:30
Delphi - Динамические списки в Delphi Новичёк Программирование и базы данных 5 14-12-2004 10:57
Сокращенные списки Surround Microsoft Windows 95/98/Me (архив) 1 30-10-2003 08:40




 
Переход