设为首页收藏本站

自学it网-公益PHP培训!

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1144|回复: 0

PHP巩固课程 55课作业。 [复制链接]

Rank: 1

发表于 2018-1-9 01:16:20 |显示全部楼层
<?php
/*
        题1:
                一个多维数组,如果单元值为数字,则把其值修改为原来2倍
*/
        $arr = array(1,2,'b',array(3,'c',array(4,5)));
        function arrayX2($array){
                //遍历整个数组用来查询数组中的值
                foreach ($array as $k => $v) {
                        //判断得到的值是否是数组
                        if (is_array($v)) {
                                $array[$k] = arrayX2($array[$k]);
                        }
                        //判断得到的值是否是数字,如果是就直接把这个key上对应的值*2
                        if (is_numeric($v)) {
                                $array[$k] *= 2;
                        }
                }
                //注意!!!必须返回数组,否则在函数内部他会呈现多个数组,直接在函数内部打印是错误的!!!以后注意!一定是返回之后再外部再调用打印!!!!
                return $array;
        }
        print_r(arrayX2($arr));
        echo '<br />','----------------------题一---------------------','<br />';
/*
        题2:
                一个多维数组,如果单元值为字符串,则在原有字符串后面加上.supper
*/
        function addSupper($array){
                foreach ($array as $k => $v) {
                        if (is_array($v)) {
                                $array[$k] = addSupper($array[$k]);
                        }
                        //这里有个简单的方法,直接使用is_string()函数可以直接判断得到的值是否为字符串
                        if (is_numeric($v) === false && is_array($v) === false) {
                                $array[$k] = $v . '.Supper';
                        }
                }
                return $array;
        }
        echo '<br />','----------------------题二---------------------','<br />';
        print_r(addSupper($arr));
/*
        题3:
                用递归的方法创建级联文件夹。如:'a/b/c/d/e'
*/
        echo '<br />','----------------------题三---------------------','<br />';
        function build_dir($dir){
                //判断文件夹是否存在,因为用的是‘或’如果文件夹不存在,将不执行右边的创建文件夹
                if(is_dir($dir) || @mkdir($dir)){
                        echo $dir.'文件夹创建成功!<br />';
                }else{        //如果文件夹不存在则进入这里
                        //进入递归函数 将需要创建的文件夹最后一层去除,因为需要用递归函数来逐级创建,
                        //否则直接创建就没意思了!
                        build_dir(dirname($dir));
                        //从递归函数出来之后创建进入递归前的文件夹,我也说不清楚,反正就是从./a~./b/c/d/e逐级创建。
                        @mkdir($dir);
                        echo $dir.'文件夹创建成功!<br />';
                }
        }
        build_dir('a/b/c/d/e');
/*
        题4:
                用递归的方法删除'./a'文件夹
                思路:
                        1、读取文件夹下所有内容,查询手册可得方法
                        2、逐个判断文件夹下东西是文件还是文件夹,如果是文件直接删除
                        3、如果是文件夹尝试删除,如果失败,则利用递归方法进入该文件夹继续删除
                        4、递归方法出来后关闭刚才打开的文件夹closedir,然后删除刚才打开的目录。
                        5、逐个删除知道最后删除根目录!
*/
        function rm_dir($path){
                echo '进入了'.$path.'文件夹<br />';
                //readdir()这个不是我写的,是手册里直接查询得到,用途是查询目录下所有的文件及文件夹
                if ($handle = opendir($path)) {
                        while (false !== ($file = readdir($handle))) {
                                //这里开始是我写的
                                //判断如果是文件夹
                                if(is_dir($path.'/'.$file)){
                                        //并且这个文件夹不是'.''..'这两个破东西
                                        if ($file != "." && $file != "..") {
                                                //尝试删除文件夹
                                                if(@rmdir($path.'/'.$file))
                                                        echo $path.'/'.$file.'文件夹删除成功!<br />';
                                                //删除失败就进入递归函数
                                                else
                                                        rm_dir($path.'/'.$file);
                                        }
                                }else{//如果发现不是文件夹就直接人道毁灭吧!
                                        unlink($path.'/'.$file);
                                        echo '删除了'.$path.'文件夹下的'.$file.'文件!<br />';
                                }
                        }
                        //打开了文件夹就记得要关闭哦!
                        closedir($handle);
                        //从递归函数中出来之后记得删除在进入递归前想删除的文件夹
                        @rmdir($path.'/'.$file);
                        echo $path.'文件夹删除成功!<br />';
                }
        }
        echo '<br />','----------------------题四---------------------','<br />';
        rm_dir('a');
        /*
         题5:给定如下数组,完成无限级分类
         array(
                 array('id'=>1,'area'=>'北京','pid'=0),
                 array('id'=>2,'area'=>'河北','pid'=0),
                 array('id'=>3,'area'=>'保定','pid'=2),       
                 array('id'=>4,'area'=>'易县','pid'=3),       
                 array('id'=>5,'area'=>'海淀','pid'=1),       
         )        id是父,pid是儿子
        要求:写函数得到如下结果
        输入0 输出0号地区下的子孙地区
        北京
                海淀
        河北
                保定
                        易县

        输入2 输出2号地区下的子孙地区
        河北
                保定
                        易县
*/
         $arr = array(
                                 array('id'=>1,'area'=>'北京','pid'=>0),
                                 array('id'=>2,'area'=>'河北','pid'=>0),
                                 array('id'=>3,'area'=>'保定','pid'=>2),
                                 array('id'=>4,'area'=>'易县','pid'=>3),
                                 array('id'=>5,'area'=>'海淀','pid'=>1));

        function find_id($array,$id,$lev = 0){
                //遍历整个数组用来查找pid这个值
                foreach ($array as $key => $value) {
                        //当pid查询到之后匹配一下,看看是不是我们想要查找的
                        if($value['pid'] == $id){       
                                echo '<br />'.str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', $lev);               
                                //如果查询到是我们要找的,就将他的area输出显示
                                print_r($value['area']);
                                //然后记录下id,用于进入下一次查询
                                $fid = $value['id'];
                                //在这里进入递归函数!
                                find_id($array,$fid,$lev+1);
                        }else
                                continue;
                }
        }
echo '<br />','----------------------题五---------------------','<br />';
        find_id($arr,0);
?>

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|自学it网 ( 京ICP备12009156号 )  

GMT+8, 2018-5-22 04:30 , Processed in 0.028948 second(s), 5 queries , Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部