Vous n'êtes pas sûr de la récursivité PHP ?
黄舟
黄舟 2017-06-30 09:56:06
0
2
878
function mkDirs1($path){
    if(is_dir($path)){//已经是目录了就不用创建
        return true;
    }
    if(is_dir(dirname($path))){//父目录已经存在,直接创建
        return mkdir($path);
    }
    mkDirs1(dirname($path));//从子目录往上创建
    return mkdir($path);//因为有父目录,所以可以创建路径
}
//mkDirs1('1/2/3/');

Cette récursion a été recherchée sur Internet. Plus je lis ses commentaires, plus je suis devenu confus
La récursion suivante a la même fonction que celle-ci

.

    $path = '11/22/33/44';
    // 归前的语句顺序执行,递归后的语句倒序执行
    function mkdirs($path)
    {
        if(is_dir($path)){
            return;
        }
        mkdirs( dirname($path) );
        return $path;
        // mkdir($path);
    }

    mkdirs($path);

Aidez-vous à analyser la différence entre les fonctions suivantes ?
Le premier commentaire récursif est-il correct ?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

répondre à tous(2)
大家讲道理

La récursion dans l'exemple est correcte. Elle peut être remplacée par une fonction : mkdir($sPath,0777,true); le troisième paramètre est la création récursive

递归创建过程
//递归寻找文件夹存在的父级目录,假设存在的父级目录为11
//进行递归向上级寻找

11/22/33/44
11/22/33
11/22
11
11/22            //在最上级目录开始逐级创建子目录
11/22/33
11/22/33/44

这就是递归的执行过程
Ty80

Le deuxième est faux. Vous avez commenté mkdir. Quelle que soit la façon dont vous récurez, vous ne pouvez pas créer le répertoire et l'emplacement de mkdir est incorrect :

 function mkdirs($path)
    {
        if(is_dir($path)){
            return;
        }
        mkdirs( dirname($path) );
        mkdir($path);
        return $path;
    }

Concernant l'explication, vous substituez les paramètres et analysez étape par étape.
Essayez d'analyser quelques paramètres et essayez :
"./a"
"./a/b"
"./a/b/c"
"./a/b/c/d"
... ....

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal