2009-12-14 8 views
0

J'ai un tableau qui répertorie les dossiers dans un répertoire. Jusqu'à présent, j'ai codé en dur les noms de dossier, mais plutôt que de le faire, j'ai pensé que je pourrais facilement créer un script pour analyser le répertoire et juste assigner chaque nom de dossier au tableau. De cette façon, je pourrais facilement ajouter des dossiers et ne pas avoir à toucher à nouveau le script ...PHP remplissant dynamiquement un tableau

Le tableau de l'objet crée une liste des options menu déroulant répertoriant chaque dossier ...

Actuellement, le tableau est Hardcoded comme si ...

"Options" => array (dossier "one" => "folder1", dossier "deux" => "dossier2")),

Mais je suis en train de le rendre dynamique basée sur tous les dossiers qu'il trouve dans le répertoire donné.

Voici le script que j'utilise pour analyser le répertoire et renvoyer les noms de domaine au tableau. Ça fonctionne bien.

function getDirectory($path = '.', $level = 0) 
{ 
// Directories to ignore when listing output. 
$ignore = array('.', '..'); 

// Open the directory to the handle $dh 
$dh = @opendir($path); 

// Loop through the directory 
while(false !== ($file = readdir($dh))) 
    { 
    // Check that this file is not to be ignored 
    if(!in_array($file, $ignore)) 
     { 
     // Show directories only 
     if(is_dir("$path/$file")) 
      { 
      // Re-call this same function but on a new directory. 
      // this is what makes function recursive. 
      //echo $file." => ".$file. ", "; 
      // need to return the folders in the form expected by the array. Probably could just add the items directly to the array? 
      $mydir2=$mydir2.'"'.$file.'" => "'.$file. '", '; 
      getDirectory("$path/$file", ($level+1)); 
     } 
    } 
} 
return $mydir2; 
// Close the directory handle 
closedir($dh); 
} 

Et voici ma première prise à obtenir ces dossiers dans le tableau ...

$mydir = getDirectory('/images/'); 
"options" => array($mydir)), 

Mais évidemment, cela ne fonctionne pas correctement depuis son pas alimenter correctement le tableau que je viens d'obtenir une chaîne dans ma liste d'options ... je suis sûr que c'est une étape de conversion facile qui me manque ...

+0

@Scott, j'ai une méthode beaucoup plus courte, mais cela dépend de la profondeur maximale. Est-ce que votre structure arborescente atteindra n'importe quelle profondeur, ou est-ce que 3 ou 4 niveaux seront aussi profonds? –

+0

Salut Doug, ce sera seulement un niveau profond. –

Répondre

0

Vous voulez créer un tableau, pas une chaîne.

// Replace 
$mydir2=$mydir2.'"'.$file.'" => "'.$file. '", '; 

// With 
$mydir2[$file] = $file; 

De même, fermez $dh avant de retourner. Maintenant, closedir n'est jamais appelé.

+0

Merci Mikael, exactement ce que je cherchais! –

1

Why not just look at php.net? Il a plusieurs exemples sur la liste de répertoires récursifs.

Voici un exemple:

<?php 
public static function getTreeFolders($sRootPath = UPLOAD_PATH_PROJECT, $iDepth = 0) { 
     $iDepth++; 
     $aDirs = array(); 
     $oDir = dir($sRootPath); 
     while(($sDir = $oDir->read()) !== false) { 
     if($sDir != '.' && $sDir != '..' && is_dir($sRootPath.$sDir)) { 
      $aDirs[$iDepth]['sName'][] = $sDir; 
      $aDirs[$iDepth]['aSub'][] = self::getTreeFolders($sRootPath.$sDir.'/',$iDepth); 
     } 
     } 
     $oDir->close(); 
     return empty($aDirs) ? false : $aDirs; 
} 
?> 
+0

Merci Steven, je suis vraiment bon avec la liste des répertoires. Le point de ma question est comment obtenir les dossiers que ma fonction crée dans le tableau. –

0

Voici une fonction simple qui retournera un tableau de répertoires disponibles, mais elle n'est pas récursive en ce sens qu'elle a une profondeur limitée. Je l'aime parce qu'il est si simple:

<?php 
    function get_dirs($path = '.'){ 
    return glob( 
     '{' . 
     $path . '/*,' . # Current Dir 
     $path . '/*/*,' . # One Level Down 
     $path . '/*/*/*' . # Two Levels Down, etc. 
     '}', GLOB_BRACE + GLOB_ONLYDIR); 
    } 
?> 

Vous pouvez l'utiliser comme ceci:

$dirs = get_dirs(WP_CONTENT_DIR . 'themes/clickbump_wp2/images'); 
0

Si vous utilisez PHP5 + vous pourriez aimer scandir(), qui est une fonction intégrée qui semble faire à peu près ce que vous cherchez. Notez qu'il répertorie tous les les entrées dans un dossier - fichiers, dossiers, . et .. inclus.