簡體   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