PHP动态填充数组

时间:2009-12-14 23:58:55

标签: php

我有一个列出目录中文件夹的数组。到目前为止,我一直在硬编码文件夹名称,但不是这样做,我想我可以轻松创建一个脚本来解析目录,并将每个文件夹名称分配给数组。这样,我可以轻松添加文件夹,而不必再次触摸脚本......

主题数组创建一个列出每个文件夹的选项列表下拉菜单...

目前,阵列是硬编码的......

“options”=> array(“folder one”=>“folder1”,“folder two”=>“folder2”)),

但我试图根据它在给定目录中找到的任何文件夹使其动态化。

这是我用来解析目录并将foldernames返回到数组的脚本。它工作正常。

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 );
}

这是我第一次将这些文件夹放入数组......

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

但显然,这不能正常工作,因为它没有正确地提供数组我只是在我的选项列表中得到一个字符串...我确信这是一个很容易转换的步骤,我很想念......

4 个答案:

答案 0 :(得分:1)

Why not just look at php.net?它有几个关于递归目录列表的例子。

以下是一个例子:

<?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; 
} 
?>

答案 1 :(得分:0)

您想要创建一个数组,而不是字符串。

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

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

此外,请在返回前关闭$dh。现在,从未调用过closedir。

答案 2 :(得分:0)

这是一个简单的函数,它将返回一个可用目录数组,但它不具有递归性,因为它具有有限的深度。我喜欢它,因为它很简单:

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

你可以像这样使用它:

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

答案 3 :(得分:0)

如果你正在使用PHP5 +,你可能会喜欢scandir(),这是一个内置函数,似乎可以完成您所追求的功能。请注意,它列出了所有文件夹中的条目 - 包含的文件,文件夹,...