Træstruktur
Regins Corner...  
 
  Freelance | Søgemaskine-optimering | Referencer | PHP Scripts | Nyheder | Sitemap  
   Mails fra PHP
   Dropdowns - Selects
   Upload med PHP
   MySQL Sortering
   Du er her
   Paging
   Træstruktur
   Tilfældigt kodeord
   Headers håndtering
   Procentbar
   Dansk dato format
   Tell a friend
   Google placering

Træstruktur

Jeg blev træt af at skulle lave det samme kode igen og igen hver gang jeg skulle bruge en træstruktur så jeg lavede følgende klasse til at klare en stor del af arbejdet.
Et eksempel på brug af denne klasse kan ses på Sitemappet.

<?php
/*
#Copyright Regin Gaarsmand - email: regin(snabela)gaarsmand.dk
#www.reginscorner.dk
*/
/*
$SITES = array();
$SITES[1] = "ET";
$SITES[2] = "TO";
$SITES[3] = "TRE";
$SITES[4] = "FIRE";
$SITES[5] = "FEM";
$SITES[6] = "SEKS";
$SITES[7] = "SYV";
$SITES[8] = "OTTE";
$SITES[9] = "NI";
$SITES[10] = "TI";
$SITES[11] = "ELEVE";
$tree = new treestructure();

$tree->addpart(1,0);
$tree->addpart(2,1);
$tree->addpart(3,1);
$tree->addpart(4,2);
$tree->addpart(5,2);
$tree->addpart(6,5);
$tree->addpart(7,3);
$tree->addpart(8,6);
$tree->addpart(9,1);
$tree->addpart(10,3);
$tree->addpart(11,4);

printtree($tree);


//    printtree()
//    Simpelt eksempel på udskrivning af en træstruktur

function printtree($tree,$start = 0,$level=0)
{
    global $SITES;
    for($i=0;$i<$level;$i++)
    {
        echo "&nbsp;&nbsp;&nbsp;&nbsp;";
    }
    echo "-".$SITES[$start]."<br>";
    if(count($tree->childrens[$start])>0)
    {
        $level++;
        foreach($tree->childrens[$start] as $value)
        {
            printtree($tree,$value,$level);
        }
    }
}
*/
class 
treestructure
{
    var 
$ids
;
    var 
$childrens
;
    var 
$returnvalue
;
    
    function 
treestructure
()
    {
        
$this->ids 
= array();
        
$this->childrens 
= array();
    }
    
    
/*
    addpart()
    Tilføjer en ny sammenslutning til træet.
    */
    
function addpart($id$pid,$title=null
)
    {
        
$idpart = new treepart($id$pid,$title, &$this
);
        
$this->ids[$id]= $idpart
;
        
$this->childrens[$pid][] = $id
;
    }
    
    
/*
    unfold()
    Returnerer en ny træstruktur fra den originale.
    $start - id til stedet hvor træstrukturen begynder.
    $exclude - exclude er id på en gren som ikke skal medtages i træstrukturen
    */
    
function unfold($start$exclude=null,$returnvalue null
)
    {
        if(
$returnvalue===null
)
        {
            
$returnvalue = new treestructure
();
            
$returnvalue->addpart($start,0,$this->ids[$start]->title,$this->ids[$start]->type
);
        }
        else
        {
            
$returnvalue->addpart($start$this->ids[$start]->pid$this->ids[$start]->title,$this->ids[$start]->type
);
        }
        if(
count($this->childrens[$start])>&& $start != $exclude
)
        {
            foreach(
$this->childrens[$start] as $value
)
            {
                
$returnvalue $this->unfold($value,$exclude,$returnvalue
);
            }
        }
        return 
$returnvalue
;
    }
    
    
/*
    climb()
    Klatrer ned til roden fra en given id.
    Returnerer de id'er som er fra starten og ned til roden eller starten på en gren som er "faldet af træet".
    $id - stedet hvor nedklatringen starter.
    $array - skal ikke udfyldes udefra.
    */
    
function climb($id$array
=array())
    {
        
$array array_merge(array($this->ids[$id]->id),$array
);
        if(
$this->ids[$id]->pid!=0
)
        {
            
$array $this->climb($this->ids[$id]->pid,$array
);
        }
        return 
$array
;
    }
    
    
/*
    brokenbranches()
    Returnerer de grene som ikke hører sammen med roden.
    I en "rigtig" træstruktur skulle denne funktion gerne returnere et tomt array!
    */
    
function brokenbranches
()
    {
        
$bb 
= array();
        foreach(
$this->ids as $key =>$value
)
        {
            if(!
$this->ids[$value->pid]&&$value->pid!=-1||$value->pid==$value->id
)
            {
                
$bb[] = $key
;
            }
        }
        return 
$bb
;
    }
    
    
/*
    in_tree()
    Finder ud af om en bestemt knude er i træet
    $id er id på knude der testes efter
    */
    
function in_tree($id
)
    {
        if(
$this->ids[$id
])
        {
            return 
true
;
        }
        return 
false
;
    }
    
    
/*
    dtree() - Til implementering af JavaScript dTree på - http://www.destroydrop.com/javascripts/tree/
    */
    
function dtree($name,$moving="true",$escape=0
)
    {
        
$str 
'<script type="text/javascript">
        moving = '
.$moving.
';
        escapet = '
.$escape.
';
        '
.$name.'= new dTree(\''.$name.
'\');
        '
;
        foreach(
$this->ids as $v
)
        {
            
$str .= "$name.add($v->id,$v->pid,'".$v->title."','".$v->type."');\n"
;
        }
        
$str .= 
"document.write($name);
        </script>"
;
        return 
$str
;
    }
}

class 
treepart
{
    var 
$id
;
    var 
$pid
;
    var 
$title
;
    var 
$tree
;
    
    function 
treepart($id$pid$title,$tree
)
    {
        
$this->id $id
;
        
$this->SetPid($pid
);
        
$this->title $title
;
        
$this->tree = &$tree
;
    }
    
    function 
SetPid($pid
)
    {
        if(
$pid===null
)
        {
            
$this->pid=$this->id
;
        }
        else
        {
            if(
$pid==0
)
            {
                
$this->pid = -1
;
            }
            else
            {
                
$this->pid=$pid
;
            }
        }
    }
}
?>

 
 
  © Copyrights Regin Gaarsmand 2002-2007
Kontakt | ButikListen.dk | Aestetik-priser.dk | Precios-Esteticos.com | ListaDeTiendas.com | annoncelisten.dk