簡體   English   中英

從 php scandir 列表中刪除文件夾

[英]Remove folders from php scandir listing

我有一個 php 腳本$filelist = scandir('myfolder/')列出了我文件夾中的文件。 但它也將子文件夾添加到數組中,以便在我使用foreach打印結果時也會填充它們。 我想刪除被添加到數組中的文件夾。 我怎樣才能做到這一點??

簡單的方法

$dir = 'myfolder/';
$filelist = scandir($dir);
foreach ($filelist as $key => $link) {
    if(is_dir($dir.$link)){
        unset($filelist[$key]);
    }
}

如果您知道文件夾的名稱,您可以創建這些文件夾的數組,然后使用 array_diff 從結果中刪除它們:

$folders = array('..', '.', 'folder');
$files = array_diff(scandir($dir), $folders);

一個干凈簡潔的解決方案可能是使用array_filter排除所有像這樣的子目錄

$files = array_filter(scandir('directory'), function($item) {
    return !is_dir('directory/' . $item);
});

這也有效地消除了. ..分別代表當前目錄和父目錄。

您可以使用 function glob() ,並檢查數組是否為is_dir()

scandir 返回一個文件夾數組。 您可以像這樣刪除數組的任何元素:

unset( $filelist[0] );

其中 0 是您要刪除的元素的索引。 如果需要按名稱查找目錄,也可以使用 array_search()。

嘗試

<?php
$dir = "/example";

$filelist = new Array();
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if (!is_dir($file)) {
                $filelist[] = $file;
            }
        }
        closedir($dh);
    }
}
?>

這就像做一個scandir,但檢查返回文件的類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM