Home  >  Q&A  >  body text

一段php代码,程序能运行,但同学说我代码有问题,求大神指点一下

<?php
function mc_sc($a) { //这是一个删除目录的函数,$a是要删除的目录路径
    $b = scandir($a);
    array_shift($b);
    array_shift($b);
    $str = $a;
    foreach ($b as $c) {
        $d = $a . "/" . $c;
        if (is_dir($d)) {
            $str.= "," . mc_sc($d); //这里我最后echo了一下$str,得到的是所有$a下的所有子目录路径,我不知道为什么,求大神指点一下。

        } else {
            unlink($d);
        }
    }
    $e = explode(",", $str);
    $f = array_reverse($e);
    foreach ($f as $g) {
        rmdir($g);
    }
}
mc_sc("D:/wamp/www/css");
?>
大家讲道理大家讲道理2764 days ago466

reply all(2)I'll reply

  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:04:14

    需要吐槽的地方太多:

    1. 其实有比scandir()更好用一点的遍历函数,那就是 glob,起码两个array_shift()和一个记录前缀的$str就完全不用了。

    2. ms_sc()函数都没有return值,我并不觉得能echo出所有的子目录,起码我没看出来,可能我眼拙了吧。

    3. 这个是最值得吐槽的了,那个explode是怎么回事,要有多丑就有多丑,看着这样的代码简直愁死了。

    最后建议多看看手册,手册上已经有很多写的很好的代码了,比如用scandir()的这个代码写的就比你漂亮多了,然后这个代码就是用glob()的直接就比上一个代码少了一步,把这个代码浓缩精简恶趣味一下就是:

    function r($d) {
        foreach(glob("$d/*") as $f) is_dir($f) ? r($f) : unlink($f);
        return rmdir($d);
    }
    

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 15:04:14

    首先你先别怪没人给你回答,没人回答是应该的(除了我正好现在闲的蛋疼。。)

    1. 别的不说,变量名都是a、b、c、d是怎么个情况。。变量名要有意义,起码看起来方便
    2. 得到所有子目录路径是应该的,外层的if(is_dir($d))就是过滤出目录,还不明白就去搞清楚递归
    3. 最后我很想问一句,你写的这段程序你真的能理解么?(里面的函数都是干什么用的?两个foreach循环分别是干什么的?为什么不先删目录,然后删文件?)

    慢慢来,啥东西都是从无到有

    reply
    0
  • Cancelreply