Visualizzazione dei risultati da 1 a 6 su 6

Discussione: funzione ricorsiva

  1. #1

    funzione ricorsiva

    come faccio a fare in modo che una funzione ricorsiva passi dei valori (ad ogni passaggio) all'esterno?

    esempio:
    funzione ricors($param)
    {
    ...
    ...
    return $risult;
    ricors($param);
    }

    la domanda è: come faccio ad usare tutti i $risult che vengono "prodotti" dalla funzione all'esterno di essa? e se anzichè un solo valore avessi diversi dati da passare in questo modo?

    so che è una domanda abbastanza stupida ma sono alle prime armi...

    grazie

  2. #2
    Utente di HTML.it L'avatar di Inoki
    Registrato dal
    Oct 2001
    Messaggi
    788

    Re: funzione ricorsiva

    Originariamente inviato da elcholo
    come faccio a fare in modo che una funzione ricorsiva passi dei valori (ad ogni passaggio) all'esterno?

    esempio:
    funzione ricors($param)
    {
    ...
    ...
    return $risult;
    ricors($param);
    }

    la domanda è: come faccio ad usare tutti i $risult che vengono "prodotti" dalla funzione all'esterno di essa? e se anzichè un solo valore avessi diversi dati da passare in questo modo?

    so che è una domanda abbastanza stupida ma sono alle prime armi...

    grazie
    memorizzi i risultati in un array incrementando l'indice ad ogni passaggio..
    alla fine hai un array che ha ad ogni elemento il valore passato ad ogni passaggio..
    ma forse non ho capito...

    posta la funzione che hai fatto fin'ora magari ci capiamo meglio
    "La teoria è quando si sa tutto e niente funziona. La pratica è quando
    tutto funziona e nessuno sa il perché. In questo caso, abbiamo messo
    insieme la teoria e la pratica: non c'è niente che funziona... e nessuno sa
    il perché!" (Albert Einstein)

  3. #3
    eccola:

    function categorie($padre)
    {
    $query = mysql_query("SELECT * FROM categorie WHERE padre=$padre ORDER BY id");
    if (mysql_affected_rows() != 0)
    {
    while ($categoria = mysql_fetch_array($query))
    {
    $out = array();
    $out['id'] = $categoria['id'];
    $out['nome'] = $categoria['nome'];
    return $out;
    categorie($categoria['id']);
    }
    }
    }

    la tabella categorie è composta da id, padre (id padre) e nome.
    praticamente mi legge in sequenza la struttura padri-figli-ecc memorizzata nella tabella (albero gerarchico).
    vorrei usare all'esterno l'id e il nome di ogni categoria per usarli come voglio (una volta in una stampa, una volta in un elenco, una volta come voci di una select, ecc..)

    capito?

  4. #4
    Originariamente inviato da elcholo
    eccola:

    function categorie($padre)
    {
    $query = mysql_query("SELECT * FROM categorie WHERE padre=$padre ORDER BY id");
    if (mysql_affected_rows() != 0)
    {
    while ($categoria = mysql_fetch_array($query))
    {
    $out = array();
    $out['id'] = $categoria['id'];
    $out['nome'] = $categoria['nome'];
    return $out;
    categorie($categoria['id']);
    }
    }
    }

    la tabella categorie è composta da id, padre (id padre) e nome.
    praticamente mi legge in sequenza la struttura padri-figli-ecc memorizzata nella tabella (albero gerarchico).
    vorrei usare all'esterno l'id e il nome di ogni categoria per usarli come voglio (una volta in una stampa, una volta in un elenco, una volta come voci di una select, ecc..)

    capito?


    prova a usare global
    così

    global $out['id'];

    cosi puoi richaimare la variabile $out[id] anche fuori dalla funzione e questo che volevi no?

  5. #5
    bellina è bellina - le funzioni ricorsive hanno un certo fascino - ma a livello di prestazioni e risorse utilizzate è assai problematica, soprattutto se fai una query ad ogni chiamata.

  6. #6
    prova a usare global
    così

    global $out['id'];

    cosi puoi richaimare la variabile $out[id] anche fuori dalla funzione e questo che volevi no?
    quello che vorrei ottenere è di poter usare il risultato al di fuori della funzione TUTTE LE VOLTE che viene eseguita il return. essendola funzione ricorsiva questo accade n volte ma io da fuori la funzione non riesco a farlo... l'unica forse è di memorizzare tutti i dati in un array e poi scorrerlo una volta terminata la funzione...

    bellina è bellina - le funzioni ricorsive hanno un certo fascino - ma a livello di prestazioni e risorse utilizzate è assai problematica, soprattutto se fai una query ad ogni chiamata.
    del resto non so come fare diversamente ad ottenere in sequenza l'albero gerarchico della tabella... essendo a livelli non definiti non posso fare altro... o c'è qualche altro modo???

    cmq grazie

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.