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

    foreach: problema con valori passati

    Buon giorno, ho il problema di dover estrapolare delle cartelle da una directory in base ad un array.
    Creo l'array_delle_dir a mano e facendo in questo modo è tutto ok:
    Codice PHP:
    $path "DOC/Band/Copia di Band/";
    $array_delle_dir = array( 0=>"1_Dream Theater",1=>"2_Deep Purple",2=>"3_Rammstein",3=>"4_Edguy",4=>"5_Avantasia");

    if (
    is_dir($path)) {
        
    $i=0;
        foreach (
    $array_delle_dir as $subDir
    se invece voglio creare l'array in modo dinamico estrapolando l'id e il nome della band da DB ho problemi, faccio cosi:
    Codice PHP:
    $path "DOC/Band/Copia di Band/";
    $bandDb'';
        while (
    $riga cFetch($Risultato)) {
            
    $nomeBand str_replace(".","",$riga['NOME_BAND']);
            
    $id $riga['ID'];
            
    $bandDb.=  $id."_".trim($nomeBand).",";
        }
        
    $bandDb substr($bandDb0, -1); 

    if (
    is_dir($path)) {
        
    $i=0;
        foreach (
    $bandDb as $subDir
    Non capisco perchè non dovrebbe funzionare...
    Potete aiutarmi per favore?
    Grazie mille :|

  2. #2
    Da quello che vedo la differenza fra i due casi è che $array_delle_dir è un array mentre $bandDb è una stringa.
    Puoi provare a trasformare la stringa in array con la funzione explode utilizzando la virgola (che già inserisci) come delimitatore, la sintassi dovrebbe essere:

    codice:
    $bandDb_arr = explode(",",$bandDb);
    e poi fai il foreach su $bandDb_arr

    Ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  3. #3
    ti ringrazio sei stato non utile, ma indispensabile per risolvere una cosa che erano mesi che la cercavo..
    molte molte grazie e buone feste....

  4. #4
    Di niente.
    Buone feste anche a te
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  5. #5
    un'altra cosetta scusami, dato lo script che posto vorrei mi restituisse il totale delle sotto cartelle contenute nella directory principale, ma cosi com'è non sembra farlo, puoi aiutarmi ancora per favore?
    Codice PHP:

    function contaFile($path)
    {
    $count 0;
        
    $dir opendir($path);
        while ((
    $entry readdir($dir)) !== false)
            if (
    is_file($entry))
            ++ 
    $count;
            
    closedir($dir);
            return 
    $count;
    }
                                        
    echo 
    "Elenco dei files:

    "
    ;

    $path "DOC/Band/Copia di Band/"
                                            
    if (
    $cartella opendir($path)) {
        while (
    false !== ($file readdir($cartella))) {
            if (!
    preg_match("#^\.\.?$#"$file)) {
                
    $numero contaFile($path);
                echo 
    "$numero 
    "
    ;
            }
        }
        
    closedir($cartella);

    grazie ancora :|

  6. #6
    Ciao,
    lo script che hai postato fa un ciclo while su tutti gli oggetti (cartelle e file) della cartella indicata in path e, per ciascuno di loro, chiama la funzione contaFile che conta i file (solo i file) presenti nella cartella. Questo numero viene poi stampato a video.
    Chiaramente non è una buona gestione perché la funzione viene richiamata n volte per fare sempre la stessa cosa.

    Io, per esempio l'ho inserito in una cartella che contiene 11 file e 3 sottocartelle e ho indicato "./" nel path e ottengo 14 volte il numero 11.

    Ora, non ho ben capito tu cosa vuoi fare, se vuoi contare i file e ottenere il risultato una sola volta devi eliminare il ciclo while cioè, invece di

    codice:
    if ($cartella = opendir($path)) { 
        while (false !== ($file = readdir($cartella))) { 
            if (!preg_match("#^..?$#", $file)) { 
                $numero = contaFile($path); 
                echo "$numero 
    "; 
            } 
        } 
        closedir($cartella); 
    }
    metti solo

    codice:
                $numero = contaFile($path); 
                echo "$numero 
    ";
    Facendo così nel mio caso ottengo 11 una sola volta.

    Se invece vuoi che ti restituisca solo il numero di sottocartelle (nel mio caso sarebbe 3), fermo restando che devi togliere il ciclo e lasciare solo le due istruzioni che ti ho detto, devi anche cambiare "is_file" con "is_dir" e aggiungere la preg_match (riferita a $entry) per filtrare le due directory fittizie

    codice:
    function contaFile($path) 
    { 
    $count = 0; 
        $dir = opendir($path); 
        while (($entry = readdir($dir)) !== false) 
          if (!preg_match("#^..?$#", $entry))
            if (is_dir($entry)) 
            ++ $count; 
            closedir($dir); 
            return $count; 
    }
    se invece non è ciò che volevi spiegami meglio la cosa.
    Ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  7. #7
    si vorrei mi restituisse una sola volta il conteggio totale delle cartelle...
    provando mi restituisce zero faccio cosi:
    Codice PHP:


    $path 
    "DOC/Band/Copia di Band/"

    function 
    contaFile($path

    $count 0
        
    $dir opendir($path); 
        while ((
    $entry readdir($dir)) !== false
          if (!
    preg_match("#^..?$#"$entry))
            if (
    is_dir($entry)) 
            ++ 
    $count
            
    closedir($dir); 
            return 
    $count


    $numero contaFile($path); 
    echo 
    "$numero 
    "

    dovrebbe se cosi è corretto restituirmi 32, invece 0...mmma
    dove sbaglio?

  8. #8
    A me quel codice funziona, l'unico problema che posso immaginare è che il path che indichi non sia corretto.

    Il path, indicato come hai fatto tu è relativo alla directory in cui si trova lo script cioè DOC deve essere una sottodirectory di quella.

    Se DOC è contenuta nella root devi scrivere "/DOC/Band/Copia di Band/" con uno slash iniziale
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

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.