我试图通过使用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]))
答案 0 :(得分:4)
您可以使用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);
答案 1 :(得分:4)
在您的情况下,Notice: Undefined offset: 0
会发生,因为arry_diff
会返回一个数组,其中包含第一个数组 中的所有条目,而无需重新编制索引 。这意味着$files
数组在0
处理后不会有array_diff
索引。
而不是在循环中迭代时“拼接”数组项 - 使用array_filter
仅获取目录名称:
$path = "Calltypes/";
$files = scandir($path);
$files = array_diff(scandir($path), array('.', '..'));
$files = array_filter($files, "is_dir");