2

ディレクトリを開いて、その中のすべてのファイルを読み取り、それらをに入れたいと思いますarray。これまでのところ、次のようになっています。

$imagesdir = $CFG->dataroot.'/1/themeimages/';

これは私にディレクトリへのパスを与えます、次のステップは何ですか?

4

5 に答える 5

2

opendir解決策は++を使用することですreaddir最初のページから例を引用)closedir

$imagesdir = $CFG->dataroot.'/1/themeimages/';
if ($handle = opendir($imagesdir)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            echo "$file\n";
        }
    }
    closedir($handle);
}


別の解決策は、クラスを使用すること[DirectoryIteratorです] 4ページからの例を引用__construct

$imagesdir = $CFG->dataroot.'/1/themeimages/';
$dir = new DirectoryIterator($imagesdir);
foreach ($dir as $fileinfo) {
    if (!$fileinfo->isDot()) {
        var_dump($fileinfo->getFilename());
    }
}


もちろん、いずれの場合も、ファイルの名前をエコーし​​たりダンプしたりするのではなく、ファイルを配列に配置する必要があります。

これは、ループの前に配列を初期化することを意味します。

$list_files = array();

そして、ループ内で、選択したソリューションに応じて、これら2つの行のいずれかのようなものを使用します。

$list_files[] = $file;
$list_files[] = $fileinfo->getFilename();
于 2010-02-25T21:12:00.123 に答える
2

組み込み関数scandirを使用するだけです:

ディレクトリからファイルとディレクトリの配列を返します。

したがって、次のように使用します。

$array = scandir($imagesdir);

もちろん、DirectoryIteratorを使用することもできますが、これははるかに簡単です。

ドットファイルを削除することもできます。

$array = array_diff(scandir($imagesdir), array('.', '..'));
于 2010-02-25T21:16:02.220 に答える
2

あなたのタグリストから、あなたはMoodleを使用していると思いますので、あなたは単に以下を使用することができます:

function get_directory_list($rootdir, $excludefiles='', $descend=true, $getdirs=false, $getfiles=true)

この関数はmoodlelib.phpに含まれています。

ドキュメントから読む:

  • 指定されたrootdirを基準にして、*すべてのサブディレクトリ内のすべてのファイル名を含む配列を返します。

オプションのパラメータの詳細については、公式ドキュメントを参照してください。

ファイルの内容を読み取るための関数は、filelib.phpでも使用できます。

于 2010-03-01T10:19:26.400 に答える
1

よりOOのアプローチについては、DirectoryIteratorクラスを使用してください。

$images = array();
$imagesdir = $CFG->dataroot.'/1/themeimages/';
foreach (new DirectoryIterator($imagesdir) as $file) {
   if($file->isDot()) continue;
   $images[] = $file;
}
于 2010-02-25T21:17:32.363 に答える
1

後でフィルターも必要な場合の最短の解決策は次のとおりです。

$imagesdir = $CFG->dataroot.'/1/themeimages/*.*';
foreach (glob($imagesdir) as $file)
  array_push($files,$file);

phpは自動的に除外.します..

上記のように、すべてのファイルが必要ない場合は、独自のマスクを指定することもできます*.* 。phpも自動的に$files配列を作成します。

最後の行も次のようになります。

$files[]=$file;
于 2010-02-25T21:28:11.760 に答える