2

这是我的代码:

$dir = "img/";
$files = scandir($dir);

for ($i=0; $i <= count($files); $i++) { 
    echo $files[$i]."<br/>";
}
echo count($files);

数组计数在空数组上返回值 2,我检查了隐藏文件,零结果。那么是什么原因造成的呢?var_dump 结果

array(7) { 
[0]=> string(1) "." 
[1]=> string(2) ".." 
[2]=> string(8) "img1.gif" 
[3]=> string(8) "img2.gif" 
[4]=> string(8) "img3.jpg" 
[5]=> string(8) "img4.png" 
[6]=> string(8) "img5.png" 
}
4

4 回答 4

4

这是因为您的数组包含“。” & '..' 两个文件名。

您可以使用以下代码摆脱它

$files = array_diff(scandir($dir), array('..', '.'));
于 2013-05-06T07:08:56.447 回答
0

您应该检查scandirfirst 的返回值。看看是否$files真的是一个数组?

<?php
$dir = "t";
$files = scandir($dir);
if(is_array($files))
{
for ($i=0; $i <= count($files); $i++) { 
    echo $files[$i]."<br/>";
}
echo count($files);
}
?>
于 2013-05-06T07:07:33.627 回答
0

这是 scandir() 的正常行为,也是如此。

这是因为每个目录都包含两个逻辑条目

1)“。” 引用当前目录。
2) ".. 对父目录的引用。

所以对于空目录,你也会得到列表 2 的东西。

参见:PHP scandir() 函数

于 2013-05-06T07:09:09.353 回答
0

问题是 scandir() 也返回“。” 和“..”指的是父目录。如果你 var_dump($files) 你会看到我在说什么。

于 2013-05-06T07:10:55.183 回答