在目录数组上使用scandir

时间:2014-06-10 18:22:12

标签: php

我想传入一个包含要扫描的目录列表的数组。我想迭代每个目录并将其内容推送到我将打印出来的另一个数组中,但由于某种原因,我的代码无效。目录存在且路径正确。我认为这与我如何使用foreach有关。

这些是我得到的错误:

  

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

     

警告: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\\"]);

如果有人能想到更简单的方法,请不要犹豫告诉我。

2 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。但是,您需要进行一些更改。

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就会将新值推送到数组的末尾。

答案 1 :(得分:1)

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);
}

我就是这样做的。它提供了一些检查并设置数据,因此您可以更清楚地了解它。