Newsgroup: it.comp.www.php
Titolo: strana operazione su un array multidimensionale

salve ragazzi
salve setec (ho visto che sei molto in gamba con la programmazione)
ho un piccolo problema
non riesco a implementare un algoritmo che mi permetta di creare un "albero" molto profondo.. ma vi spiego in dettaglio
nel database ho una tabella chiamata "categorie" :)
CATEGORIE
id_categorie - nome_categoria - id_child
id_child se = 0 identifica la categoria root altrimenti un suo numero si riferisce in maniera iterativa all'id di un'altra categoria (sarebbe un rif in sql proprio)
dal mio punto di vista e' perfetto non occorre altro
tuttavia chi deve usare sto tree di categorie deve (data la sua incompetenza in materia) poter vedere l'albero in tutta la sua estenzione
quindi avevo pensato una funzione che dovrebbe iterare dentro un array costruito ad hoc
(piuttosto che fare un sacco di chiamate al database)
questa e' la fase relativa alla costruzione dell'array
$database->db_query("SELECT * from ".$setting["prefix"]."categoria  ");
					while ($query= $database->query_fetchrow() )
					{
						#list($year,$month,$day) = sscanf($query['data'],'%4s%2s%2s');
 
						#ricostruzione tree
						if ( $query['id_child']==0 )
						{
							$padre="PADRE";
							$tree[$query['id_categoria']]= ""; #init padre
						}
						else 
						{
							$padre="";
							if ( asd($tree, $query['id_child']) )
								$tree[$query['id_child']][$query['id_categoria']]=  $query['nome_categoria'] ;
							elseif ( asd($tree, $query['id_child'], 1) )
								$tree[1][$query['id_child']][$query['id_categoria']]=  $query['nome_categoria'] ;
						}
questa e' la funzioncina di ricerca che avevo pensato
  	    				function asd ( $array, $search, $deep=0) {
  	    					if ($deep==0)
  	    					{
  	    				  	foreach($array as $key => $value)
											if($key == $search)
												return TRUE; #echo "[ $key ]";
											else
												return FALSE;
									}
									else
									{
										foreach($array as $key => $value)
											asd($array[$value], $search, $deep-1 );
									}
								}  	
il campo deep serviva per saper fino a che livello estendere la ricerca
ma non funziona.. diciamo che schematicamente SO quello che deve fare la funzione (pensate che e' la prima volta che mi sono fatto uno schema a blocchi tanta e' stata la frustrazione di non capire come cavolo implementare questa rognosa cosa)
manon so come metterlo a codice
speranzoso in un vs aiuto
-- 
blackout314 
------------------------------------------------------------------------ 
View this thread:: 
http://www.itsistemi.net/viewtopic-637182.html
 
send from 
http://www.itsistemi.net
 

 
non ho letto il tuo codice ma..
IMHO io aggiungerei un campo che indichi la profondita' del nodo..
poi selezionerei solo i nodi che interessano il livello di profondita'
voluto e inizierei ad ordinare..
cmq sempre IMHO se quest'operazione e' frequente implementerei al posto
dell'Adjacency list model il Nested set model sempre con un campo per la
profondita'.. in questo modo non dovresti ordinare i nodi ne dovresti
preoccuparti particolarmente di una eventuale indentazione..
alternativa valutabile e' costruire l'intero albero (Adjacency list model o
Nested set model) ricorsivamente e salvarlo sul server, aggiornandolo
quando necessario in modo da riproporlo quando desiderato..
-- 
www.iuz-lab.info

 
non ho ltto il tuo codice ma..


grazie mi faccio una ricerchina e vedo cosa posso ricavare
