Php 在目录数组上使用scandir
我想传入一个数组,其中包含要扫描的目录列表。我想迭代每个目录,并将其内容推送到另一个数组中,然后打印出来,但由于某些原因,我的代码无法工作。目录存在并且路径正确。我想这与我如何使用foreach有关 以下是我遇到的错误: 注意:未定义的索引:C:\Users\john\Desktop\files\images\in 第6行的C:\xampp\htdocs\test.php 警告:scandir():目录名在中不能为空 第6行的C:\xampp\htdocs\test.php 代码如下:Php 在目录数组上使用scandir,php,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 = []) {
$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\u 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);
}
我会这样做的。它提供了一些检查和设置数据,以便您可以更清楚地使用它。PHP的
foreach
与JavaScript的for in
语句不同$bar
将是实际的元素,而不是元素的键。$dir
看起来像什么?@TimCooper:好的。但我只看到了第二个目录的内容。我将其更改为foreach($dir作为$bar){$list=[];array_push($list,scandir($bar))}
-这是否正确?您正在对每个目录重置$list
。将$list
移出foreach
。只需调用scandir($bar)
并使用array\u merge()将结果附加到$list。在当前表单中,每次迭代都要重置列表的内容。请注意,如果您想迭代键和值,则有foreach($key=>array$value)
语法,但我认为这里不需要这样做。
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);
}