und*_*ore 0 php arrays function array-push output
$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);
Run Code Online (Sandbox Code Playgroud)
为什么我在这里得到空输出?
array(0) { };
Run Code Online (Sandbox Code Playgroud)
这是一个范围问题.您的$files数组变量不在您的函数中.
你需要将它作为参数作为参考(由@Barmar ;)提示)传递给它.
function listFolderFiles($dir,&$files){
Run Code Online (Sandbox Code Playgroud)
并称之为.. listFolderFiles('/var/www',$files);
您将它作为引用传递,因为您没有返回数组,因此在函数内部对数组所做的任何更改都将保留在那里.因此,您需要添加引用,如方法签名中所示.这将修改原始数组本身.