Php 如何将递归函数转换为opendir

Php 如何将递归函数转换为opendir,php,recursion,opendir,Php,Recursion,Opendir,是否要转换下面的递归函数。 但是保留允许的文件扩展名(xml)的过滤器 使返回变量也成为输入变量,并在子目录上递归调用自身 function lista_xml($path, $xml_array=array()) { $dh = opendir($path); while ( false !== ($file = readdir($dh)) ) { if ($file == '.' || $file == '..') continue;

是否要转换下面的递归函数。 但是保留允许的文件扩展名(xml)的过滤器


使返回变量也成为输入变量,并在子目录上递归调用自身

function lista_xml($path, $xml_array=array()) {
    $dh = opendir($path); 
    while ( false !== ($file = readdir($dh)) )
    {
        if ($file == '.' || $file == '..') continue;
        $file = realpath($path . '/' .basename($file));

        $info = pathinfo($file);
        if (isset($info['extension']) && $info['extension'] == 'xml') {
            $xml_array[] = $file;
        } elseif ( $file!='.' && $file!='..' && is_dir($file)) {
            $xml_array = lista_xml($file, $xml_array);
        }
    } 
    closedir($dh);
    return $xml_array;
}

感谢您的帮助,但仍然可以执行递归文件(xml)子目录。@calebern,您的原始文件没有检查子目录,并且不是递归的。您希望输出的确切内容是什么?可能是我表达式的错误。我想使原始函数递归。当前仅创建包含文件夹($path)中文件的数组。@calebern,这就是我的答案的作用…我编辑了我的问题。。。
function lista_xml($path, $xml_array=array()) {
    $dh = opendir($path); 
    while ( false !== ($file = readdir($dh)) )
    {
        if ($file == '.' || $file == '..') continue;
        $file = realpath($path . '/' .basename($file));

        $info = pathinfo($file);
        if (isset($info['extension']) && $info['extension'] == 'xml') {
            $xml_array[] = $file;
        } elseif ( $file!='.' && $file!='..' && is_dir($file)) {
            $xml_array = lista_xml($file, $xml_array);
        }
    } 
    closedir($dh);
    return $xml_array;
}