$files = array();
function listFolderFiles($dir){
$ffs = scandir($dir);
echo '<ol>';
foreach($ffs as $ff){
if($ff != '.' && $ff != '..'){
if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
else echo '<li>'.$ff;
array_push($files, array('file' => $dir.'/'.$ff, 'hash' => hash_file('md5', $dir.'/'.$ff)));
echo '</li>';
}
}
echo '</ol>';
}
listFolderFiles('/var/www');
var_dump($files);
为什么我在这里得到空输出?
array(0) { };
答案 0 :(得分:6)
这是一个范围问题。您的$files
数组变量不在您的函数中。
您需要将其作为参数作为参考(由@Barmar ;)提示)传递给它..
function listFolderFiles($dir,&$files){
并将其称为.. listFolderFiles('/var/www',$files);
您将它作为引用传递,因为您没有返回数组,因此在函数内部对数组所做的任何更改都将保留在那里。因此,您需要添加引用,如方法签名中所示。这将修改原始数组本身。
答案 1 :(得分:3)
您可以通过引用传递变量,如Shankar的答案。或者您可以让函数返回结果:
$files = listFolderFiles($dir);
function listFolderFiles($dir){
$files = array();
$ffs = scandir($dir);
echo '<ol>';
foreach($ffs as $ff){
if($ff != '.' && $ff != '..'){
if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
else echo '<li>'.$ff;
array_push($files, array('file' => $dir.'/'.$ff, 'hash' => hash_file('md5', $dir.'/'.$ff)));
echo '</li>';
}
}
echo '</ol>';
return $files;
}
答案 2 :(得分:0)
为了您的目的,最好在函数本身内声明files变量,并在结尾处返回它。这样,该功能将可重复使用:
function listFolderFiles($dir){
$files = array();
$ffs = scandir($dir);
echo '<ol>';
foreach($ffs as $ff){
if($ff != '.' && $ff != '..'){
if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
else echo '<li>'.$ff;
array_push($files, array('file' => $dir.'/'.$ff, 'hash' => hash_file('md5', $dir.'/'.$ff)));
echo '</li>';
}
}
echo '</ol>';
return $files;
}
$files = listFolderFiles('/var/www');
var_dump($files);
答案 3 :(得分:-1)
你可以使用全局
function listFolderFiles($dir){
global $files; // global var
$ffs = scandir($dir);
echo '<ol>';
foreach($ffs as $ff){
if($ff != '.' && $ff != '..'){
if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
else echo '<li>'.$ff;
array_push($files, array('file' => $dir.'/'.$ff, 'hash' => hash_file('md5', $dir.'/'.$ff)));
echo '</li>';
}