- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problema con funzione ricorsiva - dati a struttura gerarchica
-
Problema con funzione ricorsiva - dati a struttura gerarchica
Ciao a tutti
sarà capitato anche a voi di dover creare un sistema di dati dinamici a struttura gerarchica.
Ho letto qui che ci sono 2 metodi e, dopo aver letto il tutorial, non contento ho deciso di utilizzarli entrambi per soddisfare la mia esigenza.ora sono alle prese con una funzione ricorsiva che crea il menu di sinistra del sito. l'obiettivo è:
quando clicco su una voce o sottovoce, mi si aprono gli elenchi di tutti i "genitori".
come mai secondo voi la ricorsione avviene una sola volta?
[PHP]<?php
function get_range(){
$result = mysql_query('SELECT lft,rgt FROM articoli WHERE id_articolo="'.$_GET[id_articolo].'"');
while($row = mysql_fetch_array($result)){
$range=array(
0=>$row['lft'],
1=>$row['rgt']
);
}//fine ciclo while
return $range;
}function is_parent($lft,$rgt,$range){
if (($lft<=$range[0])&&($rgt>=$range[1])){return true;}else{return false;}
}function get_tree($range,$id_parent,$count){
//SE E' IL PRIMO GIRO CALCOLO IL RANGE DELL'ARTICOLO SELEZIONATO
if((!$range)&&($_GET[id_articolo])){$range=get_range();}if(($_GET[id_articolo])&&(!$id_parent)){
$id_parent=$_GET[id_articolo];
}if($count>0){
$where=$id_parent;
$voci.="<ul id="sub-list">";
}else{$where=0;}$sql="SELECT id_parent,id_articolo,titolo,lft,rgt FROM articoli WHERE id_parent=".$where." ORDER BY data_ins ASC";
#echo $sql."<br>";
$query=mysql_query($sql) or die(mysql_error());
$conto=mysql_num_rows($query);//STAMPO IL MENU
for($i=0;$i<$conto;$i++){
while($dati=mysql_fetch_array($query)){$titolo_art=$GLOBALS[text]->converti_per_output($dati[titolo],0,0);
$voci.="<li><a href="index.php?id_articolo=".$dati[id_articolo].""".$class.">".$titolo_art."</a></li>";
//FINE STAMPA MENU//SE SONO NELLA VOCE DA APRIRE RICHIAMO LA FUNZIONE SUBMENU
if(is_parent($dati[lft],$dati[rgt],$range)){
$count++;echo $count."<br>";
$voci.=get_tree($range,$dati['id_parent'],$count);
}
//FINE RIPETIZIONE DELLA FUNZIONE}//fine ciclo while
}//fine ciclo forif ($count>0){$voci.="</ul>";}
//FINE STAMPA MENU
return $voci;
}$menusix="<ul id='macro-list'>";
if($ADMIN){
$menusix.="<li><a href="index.php"><strong>+NUOVO ARTICOLO</strong></a>";
}$menusix.=get_tree(0,0,0);
$menusix.="</ul>".$mess2;
?>[/PHP]grazie vivissime a chiunque mi dedicherà del tempo.
-
a: nessuno risponde perchè è complicato
b: nessuno risponde perchè sono complicato o mi sono espresso male
nessuno risponde perchè viene il mal di testa solo a pensarci
d: nessuno risponde perchè il codice, scritto da un non matematico come me forse è un po' incasinato, per non dire pieno di erroriallora? quale scegliete? la A la B la C o la D?
io compro una vocale, tu?