对于以下代码,我有多个目录和文件。我可以在每个目录中显示一个文件名(对于" 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个文件名,我该怎么办?
答案 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);
}
}
在此处详细了解continue
:http://php.net/manual/en/control-structures.continue.php