Newsgroup: it.comp.www.php
Titolo: Problema (forse banale) con una funzione

 $elencolanci = list_dir($c);
Ora, nonostante $c sia diverso da $a, anche con la seconda chiamata la
funzione va a controllare la directory /notizie/, invece che /lanci/,
come dovrebbe fare.
Non riesco a spiegarmi questo comportamento dello script: qualcuno sa
spiegarmi dove sbaglio?
 
 
-- 
... e aveva un solco lungo il viso,
come una specie di sorriso.

 come dovrebbe fare.
Non sono sicuro, ma prova a togliere "static" dalla funzione.
Ah, magari ti puň essere comodo non visualizzare tutti i files che iniziano
con un punto (cosě non vedi eventuali .htaccess etc)
   if(substr($file,0,1) == ".")    continue;
LAMASE

 wrote in message
news:1fiphlz.8cj7fa1ynunlxN%bli...@despammed.com...

Fai un reset $result_array[].
Visto che list_dir e' recursiva lo devi fare dall'esterno della funzione.
Ancora meglio passando come parametro o almeno definire $result_array con
scope globale. Cosi' come l'hai programmato una technica molto pericolosa.

> Non sono sicuro, ma prova a togliere "static" dalla funzione.
come non detto, non avevo visto la ricorsione.. vado troppo di fretta =P
LAMASE

 scope globale. Cosi' come l'hai programmato una technica molto pericolosa.
Non riesco a seguirti... :#) Non sono granchè esperto, e mi sfugge la
ragione della 'pericolosità' del codice che ho inserito...



Un static viene settato solo alla prima esecuzione di una funzione. Da come
tu hai interpretato il codice pensavi di resettare l'array ogni volta che
chiami la prima volta la funzione. Questo non succede e quindi hai creato un
problema (infatti non andava).
quindi dovevi fare di piu' per resettare veramente la variabile quando entri
nella funzione.
Ti faccio qualche esempio (spero senza errori, non ho verificato con un
esempio reale):
// soluzione con static ed esplicito reset
// piu' complesso come controlli, relativamente pulito,
// ma difficile da seguire e debuggare
function rec($param, $level)
{
    static $a=array();
    if ($level==0) // prima entrata, quindi cancellare il contenuto
        $a=array();
    while (...)
    {
        $a[]= ... ;
        if (...)
            rec($param, $level+1); // nell prossimo giro niente array()
    }
    if ($level==0)
        return $a;
}
rec("",0);
// oppure con variable globale:
// facile da seguire, pericoloso per il fatto della variabile globale
var $a;
function rec($param)
{
    global $a;
    while (...)
    {
        $a[]= ... ;
        if (...)
            rec($param);
    }
}
$a=array();
rec("");
$a=array();
rec("");
// oppure senza variable d'appoggio (solo variabili locali)
// soluzione pulita ma piu' pesante
function rec($param)
{
    $a=array();
    while (...)
    {
        if (...)
        {
            $a[]= ... ;
            $b=rec($param);
            $a=array_merge($b, $a); // array $a cresce a blocchi
        }
    }
    return $a;
}
$a=rec();
consiglio di leggere
http://it.php.net/manual/it/language.variables.scope.php

 
http://it.php.net/manual/it/language.variables.scope.php
Sto dando un'occhiata, grazie anche di questa segnalazione. :-)


 come non detto, non avevo visto la ricorsione.. vado troppo di fretta =P
Beh, lo spunto è stato comunque utile. TY!
