Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Ricostruire una sequenza con funzione ricorsiva

    Salve ragazzi,

    avrei una domanda. Ho una tabella 'sezioni' il cui campo 'madre' indica se una data sezione è una sotto-sezione di un'altra, e se sì il valore di questo campo è l'id di quest'ultima.

    es:

    ID | Madre | Titolo

    1 | 0 | Prodotti
    2 | 1 | Pasta lunga
    3 | 2 | Spaghetti

    Dovrei ora ricostruire tutto il percorso, a qualsiasi "profondità", quindi se sto in "Spaghetti" vorrei ottenere un array con gli ID delle sezioni anche superiori. Ho scritto questa funzione:

    Codice PHP:
    function recupero_principale($sezioni_storiche) {
        
            
    // GET['s'] è l'ID della sezione corrente, ovvero "Spaghetti"
        
    if(count($sezioni_storiche)==0$sezioni_storiche[]=$_GET['s'];

        
    $result_sezione=mysql_query("SELECT madre FROM sezioni WHERE idsezione=".$sezioni_storiche[(count($sezioni_storiche)-1)]);
        
    $row_sezione=mysql_fetch_array($result_sezione);

        
    // Altrimenti passo alla sua funzione madre
        
    if($row_sezione['madre']!=0) {

            
    $sezioni_storiche[]=$row_sezione['madre'];
            
    recupero_principale($sezioni_storiche);
        }    
        
    //print_r($sezioni_storiche); print '
    ';
        return $sezioni_storiche;

    Nel caso stia in "Prodotti" e "Pasta lunga" va, se sto in "Spaghetti" e decommento quel print_r mi restituisce:

    Array ( [0] => 3 [1] => 2 [2] => 1 )
    Array ( [0] => 3 [1] => 2 [2] => 1 )
    Array ( [0] => 3 [1] => 2 )

    Cosa può essere?
    Grazie

  2. #2
    Ragazzi, nessuno?

    E' troppo lungo il primo post?

  3. #3
    ma com'è possibile che all'interno della funzione ricursiva ci sia un $_GET... poi sarà che sto stanco ma non ce capisco una mazza di quello che dovrebbe fare lo script... che cos'è il parametro in ingresso, un array contenente cosa?

    cmq fai così, due funzioni: la prima "prepara quello che serve" (e quindi sarà la sola ad usare $_GET e la seconda sarà chiamata dalla prima per elaborare quell'array che passi e la chiamata recursiva la farà su se stessa
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Grazie per la risposta
    Il $_GET['s'] serve perché la prima sezione da cui deve partire lo script è quella corrente, settata nell'indirizzo URL. (Es: http://www.mioindirizzo.it/pagina.php?s=3)
    Questo infatti succede solo la prima volta, quando l'array è stato inizializzato.

    La funzione crea e si passa un array $sezioni_storiche che deve stabilire al rovescio la struttura delle sottosezioni partendo da quella corrente e finendo a quella principale.
    Nell'esempio del primo post, se io mi trovo nella sezione "Spaghetti", voglio che l'array in uscita da questa funzione abbia al suo interno gli ID della sezione corrente, di quella da cui essa dipende (in questo caso "Pasta Lunga"), e di quella da cui quest'ultima dipende (in questo caso "Prodotti") e così via.. (in questo caso si ferma al terzo passaggio)

    Comunque, ero venuto a dire che alla fine ho risolto così:

    Codice PHP:
    function sezioni_recupero_principale($sezioni_storiche=array()) {
        
        if(
    count($sezioni_storiche)==0$sezioni_storiche[]=$_GET['s'];

        
    $result_sezione=mysql_query("SELECT madre FROM sezioni WHERE idsezione=".$sezioni_storiche[(count($sezioni_storiche)-1)]);
        
    $row_sezione=mysql_fetch_array($result_sezione);

        
    // Se non è una sezione principale, continua la ricerca
        
    if($row_sezione['madre']!=0) {
            
    $sezioni_storiche[]=$row_sezione['madre'];
            
    $sezioni_storiche=sezioni_recupero_principale($sezioni_storiche);
        }
        return 
    $sezioni_storiche;


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.