阵列推送似乎不起作用

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)

Sha*_*ran 6

这是一个范围问题.您的$files数组变量不在您的函数中.

你需要将它作为参数作为参考(由@Barmar ;)提示)传递给它.

正确的方式..

function listFolderFiles($dir,&$files){
Run Code Online (Sandbox Code Playgroud)

并称之为.. listFolderFiles('/var/www',$files);

您将它作为引用传递,因为您没有返回数组,因此在函数内部对数组所做的任何更改都将保留在那里.因此,您需要添加引用,如方法签名中所示.这将修改原始数组本身.

  • 它需要通过引用传递. (3认同)