Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在递归php数组中添加数据_Php_Recursion_Array Push - Fatal编程技术网

在递归php数组中添加数据

在递归php数组中添加数据,php,recursion,array-push,Php,Recursion,Array Push,我有一个小问题,我有很多包含其他目录和文件的目录。我希望使用递归方式获取所有目录名: function getNomDossier($dir){ $root = scandir($dir); //scanne le dossier $nom = []; foreach ($root as $value) { $variable = "$dir/$value"; if ($value === '.' || $value =

我有一个小问题,我有很多包含其他目录和文件的目录。我希望使用递归方式获取所有目录名:

function getNomDossier($dir){
    $root = scandir($dir); //scanne le dossier
    $nom = [];
    foreach ($root as $value) {
        $variable = "$dir/$value";
        if ($value === '.' || $value === '..' || $value === '.DS_Store') {
            continue;
        }
        //on teste si c'est un dossier
        if (is_dir($variable)){
            array_push($nom, $value);
            getNomDossier($variable);

        }
    }

    return $nom;
}
执行此操作时,我只有第一次“扫描”,它不会进入目录中再次扫描并推入$nom


如果不清楚,很抱歉,谢谢您的帮助

您正在检查$variable是否为目录,然后在$nom中推送$value 您只是忘记了将getNomDossier返回的值推送到$nom。因此,要解决您的问题,请更换:

getNomDossier($variable);
为此:

$nom = array_merge($nom, getNomDossier($variable));
代码应该是这样的:

function getNomDossier($dir){
    $root = scandir($dir); //scanne le dossier
    $nom = [];
    foreach ($root as $value) {
        $variable = "$dir/$value";
        if ($value === '.' || $value === '..' || $value === '.DS_Store') {
            continue;
        }
        //on teste si c'est un dossier
        if (is_dir($variable)){
            array_push($nom, $value);
            $nom = array_merge($nom, getNomDossier($variable));
        }
    }

    return $nom;
}