[英]PHP scan directory and array
我有一个脚本,可以扫描文件夹并将包含的文件名放入数组中。 然后,我重新整理数组并显示文件名。
像这样:
$count=0;
$ar=array();
$i=1;
$g=scandir('./images/');
foreach($g as $x)
{
if(is_dir($x))$ar[$x]=scandir($x);
else
{
$count++;
$ar[]=$x;
}
}
shuffle($ar);
while($i <= $count)
{
echo $ar[$i-1];
$i++;
}
?>
它运作良好,但由于某种原因,我得到了以下信息:
当然,由于我进行了随机播放,因此刷新页面时顺序发生了变化,但是在200个文件名中,我总是在列表中的某个位置找到这2个“数组”。
会是什么呢?
谢谢
只是为了解释它给您Array
那一部分。
首先, scandir
返回以下内容:
从目录返回文件和目录的数组。
从该返回值中,它返回了这个(这是一个示例,仅供参考):
Array
(
[0] => . // current directory
[1] => .. // parent directory
[2] => imgo.jpg
[3] => logo.png
[4] => picture1.png
[5] => picture2.png
[6] => picture3.png
[7] => picture4.png
)
那些点实际上是文件夹。 现在在您的代码逻辑中,当点击/迭代该位置时:
if(is_dir($x))$ar[$x]=scandir($x); // if its a directory
// invoke another set of scandir into this directory, then append it into the array
这就是为什么您的结果数组包含混合字符串,而另一个多余/不需要的scandir
数组返回..
为了避免这种情况,可以使用肮脏的快速修复程序。 只是跳过点:
foreach($g as $x)
{
// skip the dots
if(in_array($x, array('..', '.'))) continue;
if(is_dir($x))$ar[$x]=scandir($x);
else
{
$count++;
$ar[]=$x;
}
}
另一种选择是使用DirectoryIterator
:
$path = './images/';
$files = new DirectoryIterator($path);
$ar = array();
foreach($files as $file) {
if(!$file->isDot()) {
// if its not a directory
$ar[] = $file->getFilename();
}
}
echo '<pre>', print_r($ar, 1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.