繁体   English   中英

使用PHP从文件和目录数组中删除文件

[英]Remove files from an array of files and directories using PHP

我试图通过使用scandir并从数组中删除文件来获取路径中的目录列表但我从回声中得到错误。

我正在使用代码

$path = "Calltypes/";
$files = scandir($path);
$files = array_diff(scandir($path), array('.', '..'));

for($i = 0; $i < sizeof($files); $i++) {
    if(!is_dir($files[$i]))
        array_splice($files, $i, 1);
}

echo sizeof($files);

这是回声输出:

Notice: Undefined offset: 0 in C:\xampp\htdocs\index.php on line 32
2

Calltypes / path有3个文件夹和1个txt文件。

编辑:第32行是

if(!is_dir($files[$i]))

你可以使用foreach而不是for 之后使用unset因为array_splice将重新排列键,因此您将收到错误

$path = "Calltypes/";
$files = scandir($path);
$files = array_diff(scandir($path), array('.', '..'));

foreach ($files as $key => $value) {
    if(!is_dir($path.$files[$key]))
       unset($files[$key]);
}
echo sizeof($files);

在您的情况下, Notice: Undefined offset: 0 ,因为arry_diff返回一个数组,其中包含第一个数组中的所有条目而不重新索引 这意味着,在array_diff处理之后, $files数组不会有0索引。

而不是在循环中迭代时“拼接”数组项 - 使用array_filter只获取目录名:

$path = "Calltypes/";
$files = scandir($path);
$files = array_diff(scandir($path), array('.', '..'));

$files = array_filter($files, "is_dir");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM