需要在目录-php中显示有限数量的文件名

时间:2015-04-10 09:13:10

标签: php

对于以下代码,我有多个目录和文件。我可以在每个目录中显示一个文件名(对于" BREAK"这是好的。)

<?php
    $dir = "/images/";
    $i=0;
    // Open a directory, and read its contents
    if (is_dir($dir)){
        if ($dh = opendir($dir)){
            while (($file = readdir($dh)) !== false){
                echo "filename:" . $file . "<br>";
                break;
                //---- if ($i>=5) { break; }
            }
            closedir($dh);
        }
    }
?>

使用 if ($i>=5) { break; }我仍然可以显示5个文件名,但它只能读取一个目录。

我想在所有目录中显示至少5个文件名,我该怎么办?

3 个答案:

答案 0 :(得分:2)

使用scandir函数。

array scandir ( string $directory [, int $sorting_order = SCANDIR_SORT_ASCENDING [, resource $context ]] )

如果您使用的是unix,您还可以进行系统调用并运行以下命令。

  

ls / $ dir |头-5

$dir是目录,-5是目录中的数字文件名。

答案 1 :(得分:1)

既然你说你有多个目录,我会重写你的代码:

(这里我首先使用array_map()遍历所有目录,然后使用glob()从每个目录中获取所有文件。之后我只使用{{3}限制每个目录的文件最后我只打印所有文件名)

<?php

    $directorys = ["images/", "xy/"];
    $limit = 3;

    //get all files
    $files = array_map(function($v){
        return glob("$v*.*");
    }, $directorys);

    //limit files per directory
    $files = array_map(function($v)use($limit){
        return array_slice($v, 0, $limit);
    }, $files);

    foreach($files as $directory) {
        echo "<b>Directory</b><br>";
        foreach($directory as $file)
            echo "$file<br>";
        echo "<br><br>";
    }

?>

答案 2 :(得分:0)

你不必打破它,你可以跳过它。在这样做时,您必须使用continue

$dir = "/images/";
$i=0;

// Open a directory, and read its contents
if (is_dir($dir)){
    if ($dh = opendir($dir)){
        while (($file = readdir($dh)) !== false){
            echo "filename:" . $file . "<br>";

            if ($i>=5)
                   continue;

        }
        closedir($dh);
    }
}

这也是另一种情况。因为你提到你有很多目录,但你只显示一个主目录,我猜你所提到的目录都在/images/目录中。

$dir = "images/";
$i=1;

// Open a directory, and read its contents
if (is_dir($dir)){
    if ($dh = opendir($dir)){
        while (($file = readdir($dh)) !== false){

            $j=1;

            if (is_dir($file)) {
                if ($internalDir = opendir($file)) {
                    while (($internalFile = readdir($internalDir)) !== false) {
                        echo $file."->filename: ".$internalFile."<br>";

                        if ($j>=5)
                               continue;

                        $j++;
                    }

                    closedir(opendir($file));
                }

            } else {
                echo "filename:" . $file . "<br>";

                if ($i>=5)
                   continue;

                $i++;
            }


        }
        closedir($dh);
    }
}

在此处详细了解continuehttp://php.net/manual/en/control-structures.continue.php