Home  >  Article  >  Backend Development  >  PHP uses recursive functions to create multi-level directories

PHP uses recursive functions to create multi-level directories

墨辰丷
墨辰丷Original
2018-06-06 11:36:091636browse

This article mainly introduces the use of recursive functions in PHP to create multi-level directories. Interested friends can refer to it. I hope it will be helpful to everyone.

The details are as follows:

function Directory($dir){
    if(is_dir($dir) || @mkdir($dir,0777)){ //查看目录是否已经存在或尝试创建,加一个@抑制符号是因为第一次创建失败,会报一个“父目录不存在”的警告。

        echo $dir."创建成功<br>";  //输出创建成功的目录

    }else{

        $dirArr=explode(&#39;/&#39;,$dir); //当子目录没创建成功时,试图创建父目录,用explode()函数以&#39;/&#39;分隔符切割成一个数组
        array_pop($dirArr); //将数组中的最后一项(即子目录)弹出来,
        $newDir=implode(&#39;/&#39;,$dirArr); //重新组合成一个文件夹字符串
        Directory($newDir); //试图创建父目录
        if(@mkdir($dir,0777)){
            echo $dir."创建成功<br>";

        } //再次试图创建子目录,成功输出目录名
    }
}

Directory("A/B/C/D/E/F");

The output result is as shown in the figure:

But it can be seen that it is too troublesome to write. Looking at the file functions in the manual, I saw a dirname() function, whose prototype is as follows:

##string dirname ( string $path )

Given a string containing the full path to a file, this function returns the directory name after removing the file name.

In Windows, both slash (/) and backslash (\) can be used as directory separators. In other circumstances it is a slash (/).

Can be slightly optimized:

function Directory($dir){

    if(is_dir($dir) || @mkdir($dir,0777)){ 

        echo $dir."创建成功<br>";  

    }else{

        Directory(dirname($dir));

        if(@mkdir($dir,0777)){

            echo $dir."创建成功<br>";

        }

    }

}

The effect is the same. After that, I searched for answers on the Internet and found an
unusually insightful :

function Directory( $dir ){  

   return  is_dir ( $dir ) or Directory(dirname( $dir )) and  mkdir ( $dir , 0777);

}

Now let’s explain the entire function:

First introduce the priority order of logical operators in PHP

: && > || > and > or, that is, symbolic type > letter type, AND type >OR type, so the function body can be seen as:

is_dir ( $dir ) or (Directory(dirname( $dir )) and mkdir ( $dir , 0777));

First determine whether the target directory exists. If it exists, depending on the short-circuit characteristics of or, the entire following will be short-circuited and execution will be skipped; if the target directory does not exist, the following function body will be executed:

Directory(dirname( $dir )) and mkdir ( $dir , 0777)

I thought about it

Do the recursion first Purpose: Execute recursion first to confirm that its parent directory (dirname($dir)) has been created, so that the subsequent mkdir() function will not issue a warning when it cannot find the parent directory when creating a subdirectory.

After entering the depth of the recursion, after confirming that the deepest root directory exists, create directories in sequence from the root directory downwards.

Finally, I suggest those who are looking for a job to go online and find some interview questions from large companies to do. After all, their exams are more comprehensive and in-depth. When learning knowledge, you should also brush up on the questions. In addition, you must also I have to do it a little bit, because it’s easy to have too much ambition but too little. I optimized the function at the beginning several times before it could be used normally.

This is an interview question about recursively creating a multi-level directory in PHP. In the future, the editor will find some interesting interview questions to share with you.

Summary: The above is the entire content of this article, I hope it will be helpful to everyone's study.

Related recommendations:

Use of each and list functions in PHP

##PHP geographical location search and distance calculation

Use skills

PHP to get the files in the directory

The above is the detailed content of PHP uses recursive functions to create multi-level directories. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn