簡體   English   中英

在目錄數組上使用scandir

[英]Using scandir on array of directories

我想傳遞一個包含要掃描目錄列表的數組。 我想遍歷每個目錄,並將其內容推送到另一個要打印的數組中,但是由於某種原因,我的代碼無法正常工作。 目錄存在並且路徑正確。 我認為這與我如何使用foreach有關。

這些是我得到的錯誤:

注意:未定義的索引:第6行的C:\\ xampp \\ htdocs \\ test.php中的C:\\ Users \\ john \\ Desktop \\ files \\ images \\

警告:scandir():目錄名在第6行的C:\\ xampp \\ htdocs \\ test.php中不能為空

這是代碼:

function test($dir = []) {
    foreach($dir as $bar) {
        $list = [];
        array_push($list, scandir($dir[$bar]));
    }

    print_r($list);
}

test(["C:\Users\john\Desktop\files\images\\", "C:\Users\john\Desktop\files\images\autumn\\"]);

如果有人可以想到一種更簡單的方法,請隨時告訴我。

您走在正確的軌道上。 不過,您需要進行一些更改。

function test($dir = []) {
    $list = [];
    foreach($dir as $bar) {
        $list[] = scandir($bar);
    }  
    print_r($list);
}

@BrianPoole所述,您需要將$list移出foreach循環。 通過將其放入循環中,每次迭代都會重置數組,從而使最終數組具有一個元素。

另外, @ TimCooper上面解釋的foreach循環與JavaScript中的操作不同。 如果您確實要訪問密鑰,則可以使用以下語法:

foreach($dir as $key => $bar)

然后,您將使用$dir[$key]$bar訪問目錄值。

最后, array_push是您不需要的其他函數調用。 通過簡單地添加[] PHP會將新值推送到數組的末尾。

function test($dir) {
    // DEFINE LIST OUT SIDE OF LOOP
    $list = array();
    // Run checks
    if(count($dir) > 0) {
        // Loop Through Directory
        foreach($dir as $directory) {
            // Push into list
            array_push($list, array("scanned"=>$directory, "contents" => scandir($directory)));
        }
    }else {
        // If no directories are passed return array with error
        $list = array(
            "error" => 1,
            "message" => "No directories where passed into test()",
        );
    }
    print_r($list);
}

這就是我要做的。 它提供了一些檢查並設置了數據,因此您可以更清楚地了解它。

暫無
暫無

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

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