我想传入一个包含要扫描的目录列表的数组。我想迭代每个目录并将其内容推送到我将打印出来的另一个数组中,但由于某种原因,我的代码无效。目录存在且路径正确。我认为这与我如何使用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\\"]);
如果有人能想到更简单的方法,请不要犹豫告诉我。
答案 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);
}
我就是这样做的。它提供了一些检查并设置数据,因此您可以更清楚地了解它。