8768 sujets

Développement web côté serveur, CMS

Bonjour!
j'ai fait une fonction qui parcoure mes repertoire et j'obtiens les resultats suivants:
Array
(
    [2013\] => Array
        (
            [10\] => Array
                (
                    [30\] => Array
                        (
                            [0] => file1.xml
                            [1] => file2.xml
                        )

                )

        )

    [2020\] => Array
        (
            [01\] => Array
                (
                    [01\] => Array
                        (
                            [0] => file1.xml
                            [1] => file2.xml
                        )

                )

        )
)

Je voudrais trouvais une solution de parcourir mes tableaux pour recuperer les chemins affichier mes resultats comme suit:
2013\10\30\file1.xml
2013\10\30\file2.xml
2020\01\01\file1.xml
2020\01\01\file2.xml

Merci pour votre aide
Bonjour,

Vous est-il indispensable de récupérer vos noms de fichier sous la forme de array imbriqués ? C'est très difficile à manipuler par la suite surtout si la profondeur tend à varier/augmenter.

Il serait probablement plus aisé de retravailler la fonction qui génère cette table afin qu'elle liste les chemins complets sous la forme d'un array à un seul niveau. Vous pourriez par la suite et selon vos besoin récupérer toute information qui vous servirait (répertoires, extensions, noms de fichier et cetera).

Pour ce faire, je vous invite à vous rapprocher de RecursiveDirectoryIterator() et RecursiveIteratorIterator()


    $_dossier_de_base = '';
    /* On parcourt $_dossier_de_base pour extraire les chemins de fichier */
    $_tree     = new RecursiveDirectoryIterator($_dossier_de_base, FilesystemIterator::UNIX_PATHS);
    /* On réitère pour parcourir tous les niveaux de l'arborescence */
    $_tree     = new RecursiveIteratorIterator($_tree);
    /* On définit des conteneurs pour les dossiers et fichiers (si on souhaite la distinction) */
    $_dossiers = $_files=array();
    /* On boucle sur l'arborescence pour nettoyage des entrées invalides et distingo répertoire/fichier */
    foreach($_tree as $_path)
    {
      /* On kick les chemins qui finissent par '/..' et '/.' */
      $_path=strtr($_path, array('/..'=>'','/.'=>''));
        /* Si c'est un répertoire on charge $_dossiers */
        if(is_dir($_path)){
          $_dossiers[]=$_path;
        }
        /* Si c'est un fichier on charge $_files */
        if(is_file($_path)){
          $_files[]=$_path;
        }
      unset($_path);
    }
    unset($_tree);
    /* On obtient $_dossiers et $_files qui contiennent les chemins de fichier */

Modifié par Greg_Lumiere (02 Jun 2017 - 09:18)