Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: matrici di matrici

  1. #1

    matrici di matrici

    Ciao
    Siccome mi trovo in una situazione nuova, almeno per me, mi spiego con l'output della matrice in questione che ottengo con
    Codice PHP:
    print_r($array); 
    codice:
    Array
    (
        [0] => 3274602.swf
        [1] => 32746023.swf
        [2] => 32746024.swf
        [altra_cartella] => Array
            (
                [0] => file_1.txt
                [1] => file_2.txt
                [2] => file_3.txt
            )
    
        [3] => doppio_link.zip
        [4] => file_e_cartelle.asp
        [5] => frame1.gif
        ...............................
        [27] => prova_3.php
        [28] => romeoGiulietta.wav
        [29] => rose anelli.gif
        [30] => rose anelli.zip
        [seconda_cartella] => Array
            (
                [cartella_interna] => Array
                    (
                        [0] => file_1.txt
                        [1] => file_2.txt
                        [2] => file_3.txt
                    )
    
                [0] => file_1.txt
                [1] => file_2.txt
                [2] => file_3.txt
            )
    
    )
    Se fosse una semplice matrice di dati di matrici potrei risolvere con la semplice verifica
    Codice PHP:
    if(is_array($array)) {
    ...........

    Purtroppo vengo a trovarmi con matrici che vanno oltre il secondo livello.
    Posso anche trovarmi in situazioni assurde come
    matrici di matrici di matrici ecc e a questo punto mi sento perso.

    Vi ringrazio se mi fate uscire da questo pasticcio in cui mi sono ficcato.

  2. #2
    Penso che se posto il codice che genera questo mostro, il problema sarà più chiaro.
    Codice PHP:
    <?php
    function read_folder_directory($dir) {
        
    $listDir = array();
        if(
    $handler opendir($dir)) {
            while ((
    $sub readdir($handler)) !== FALSE) {
                if (
    $sub != "." && $sub != ".." ) {
                    if(
    is_file($dir."/".$sub)) {
                        
    $listDir[] = $sub;
                    } elseif (
    is_dir($dir."/".$sub)){
                        
    $listDir[$sub] = read_folder_directory($dir."/".$sub);
                    }
                }
            }
            
    closedir($handler);
        }
        return 
    $listDir;



    $array = array();
    $dir 'files'// metti quì il percorso da cui partire nella lettura del filesystem
    $exclude ".|..";
    $array read_folder_directory($dir); 
    echo 
    "<pre>\n";
    print_r($array);
    echo 
    "</pre>\n";
    ?>

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Tu tto bello, ma.... noi che dovremmo dirti?
    Qual è la domanda? "Potresi risolvere" cosa?

  4. #4
    Già, la domanda.
    Come posso leggere questo tipo di matrice?
    Come debbo impostare il ciclo per leggerla?
    Normalmente uso:
    Codice PHP:
    for ($i=0$i count ($array_file); $i++) { 
    oppure
    Codice PHP:
    foreach ($array_file as $file) { 
    Se la matrice fosse semplicemente
    codice:
    Array
    (
        [0] => 3274602.swf
        [1] => 32746023.swf
        [2] => 32746024.swf
        [altra_cartella] => Array
            (
                [0] => file_1.txt
                [1] => file_2.txt
                [2] => file_3.txt
            )
    
        [3] => doppio_link.zip
        ..............
    );
    risolverei facilmente con
    Codice PHP:
    if (!is_array($test)) { 
    purtroppo mi trovo con la coda della matrice che si nidifica ulteriormente
    E' qui sotto che non riesco a leggere più la matrice
    codice:
    Array
    (
        [0] => 3274602.swf
        ..............
        [27] => prova_3.php
        [28] => romeoGiulietta.wav
        [29] => rose anelli.gif
        [30] => rose anelli.zip
        [seconda_cartella] => Array
            (
                [cartella_interna] => Array
                    (
                        [0] => file_1.txt
                        [1] => file_2.txt
                        [2] => file_3.txt
                    )
    
                [0] => file_1.txt
                [1] => file_2.txt
                [2] => file_3.txt
            )
    
    )

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Codice PHP:
    function read_folder_directory($dir) { 
        
    $sdir glob($dir.'/*');
        
    $return = array();
        foreach(
    $sdir as $file){
            if(!
    is_file($file)) $return[basename($file)] = read_folder_directory($file);
            else 
    $return[] = $file;
        }
        
        return 
    $return;
    }  

    $ciao read_folder_directory('test');


    echo 
    "<pre>\n";
    print_r($ciao);

    echo 
    "</pre>\n"
    Ho fatto alcune prove riscrivendo il codice e cosi non mi da alcun problema
    anche con 3 o più sotto-directory

  6. #6
    Grazie RoTeam
    penso proprio che una funzione sia quel che ci voleva.
    Infatti con semplici istruzioni nel codice PHP non se ne sarebbe venuto a capo.
    Questo pomeriggio testerò subito il codice che mi hai suggerito
    Grazie del tempo dedicatomi.

  7. #7
    no, pardon
    non è questo che mi serviva.
    una funzione per leggere le cartelle già c'è, anche se la tua è migliore della mia, ma restituisce lo stesso tipo di matrice.
    Quel che mi serve è invece una funzione che mi legga la matrice generata dalla funzione read_folder_directory($dir)
    Nella fretta avevo creduto che la funzione che mi hai suggerito fosse per leggere la matrice e non le cartelle.
    Grazie lo stesso comunque.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da micdas
    no, pardon
    non è questo che mi serviva.
    una funzione per leggere le cartelle già c'è, anche se la tua è migliore della mia, ma restituisce lo stesso tipo di matrice.
    Quel che mi serve è invece una funzione che mi legga la matrice generata dalla funzione read_folder_directory($dir)
    Nella fretta avevo creduto che la funzione che mi hai suggerito fosse per leggere la matrice e non le cartelle.
    Grazie lo stesso comunque.
    Non capisco cosa intendi 'per leggere la matrice' cosa devi fare di preciso? Quali problemi riscontri? Non puoi manipolare l'array che ritorna?

  9. #9
    L'esposizione del problema è difficile anche per me.
    Dunque.
    Leggo in maniera ricorsiva le cartelle e le sottocartelle con la funzione che ho usato io e che mi hai suggerito tu.
    Fin qui tutto bene.
    La funzione mi restituisce una matrice complessa.
    Ora i valori della matrice che mi viene restituita debbo in qualche modo leggerli, non certo con la print_r()
    Questa funzione mi serve solo come test per vedere se dalla funzione mi vengono restituiti i dati attesi.
    Quel che non riesco a fare è questo: leggere in maniera ricorsiva tutta la matrice, comprese le matrici contenute in essa ed altre eventuali matrici contenute nelle seconde e così via.
    Comunque la errata interpretazione che ho dato alla tua risposta mi ha suggerito l'idea di compiere questo lavoro in una funzione, anzichè direttamente nello script di lettura della matrice.
    In pratica: come per la lettura delle cartelle, se si incontra una DIR si richiama la stessa funzione dall'interno della funzione, alla stessa maniera, eseguendo la lettura della matrice restituita in altra funzione, si potrebbe richiamare la stessa funzione dall'interno della funzione se ci si imbatte in un nome di cartella anzichè in un nome di file valido.

    Farò delle prove.


  10. #10
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da micdas
    L'esposizione del problema è difficile anche per me.
    Dunque.
    Leggo in maniera ricorsiva le cartelle e le sottocartelle con la funzione che ho usato io e che mi hai suggerito tu.
    Fin qui tutto bene.
    La funzione mi restituisce una matrice complessa.
    Ora i valori della matrice che mi viene restituita debbo in qualche modo leggerli, non certo con la print_r()
    Questa funzione mi serve solo come test per vedere se dalla funzione mi vengono restituiti i dati attesi.
    Quel che non riesco a fare è questo: leggere in maniera ricorsiva tutta la matrice, comprese le matrici contenute in essa ed altre eventuali matrici contenute nelle seconde e così via.
    Comunque la errata interpretazione che ho dato alla tua risposta mi ha suggerito l'idea di compiere questo lavoro in una funzione, anzichè direttamente nello script di lettura della matrice.
    In pratica: come per la lettura delle cartelle, se si incontra una DIR si richiama la stessa funzione dall'interno della funzione, alla stessa maniera, eseguendo la lettura della matrice restituita in altra funzione, si potrebbe richiamare la stessa funzione dall'interno della funzione se ci si imbatte in un nome di cartella anzichè in un nome di file valido.

    Farò delle prove.

    Beh ovviamente andando per logica un array creato da una funzione ricorsiva puo essere letto solo da un'altra funzione ricorsiva, un esempio di output

    Codice PHP:
    function read_folder_directory($dir) {  
        
    $sdir glob($dir.'/*'); 
        
    $return = array(); 
        foreach(
    $sdir as $file){ 
            if(!
    is_file($file)) $return[basename($file)] = read_folder_directory($file); 
            else 
    $return[] = $file
        } 
         
        return 
    $return
    }   

    function 
    read_recursive($r){
        
    $return null;
       foreach(
    $r as $e){ if(is_array($e)) $return .= read_recursive($e); else $return .= 'File: '.$e.'
    '
    ; }
       
       return 
    $return;
    }

    $ciao read_folder_directory('test'); 


    echo 
    read_recursive($ciao); 

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.