数据算法

来源:互联网 发布:范剑青 知乎 编辑:程序博客网 时间:2024/05/16 12:05

无限分类生成树形结构

<?php//递归实现function genTree($items, $pid){    $tree = [];    foreach($items as $item){        if($item['pid'] == $pid){            $item['son'] = genTree($items, $item['id']);            if(!$item['son']){                unset($item['son']);            }            $tree[] = $item;        }    }    return $tree;}//非递归实现,循环中用引用变量function genTree5($items){    foreach($items as $item){        $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];    }    return $items[0]['son'] ? $items[0]['son'] : [];}function genTree9($items){    $tree = [];    foreach($items as &$item){        if(isset($items[$item['pid']]))            $items[$item['pid']]['son'][] = &$items[$item['id']];        else            $tree[] = &$items[$item['id']];    }    return $tree;}$items = array(    1 => array('id' => 1, 'pid' => 0, 'name' => '江西省'),    2 => array('id' => 2, 'pid' => 0, 'name' => '黑龙江省'),    3 => array('id' => 3, 'pid' => 1, 'name' => '南昌市'),    4 => array('id' => 4, 'pid' => 2, 'name' => '哈尔滨市'),    5 => array('id' => 5, 'pid' => 2, 'name' => '鸡西市'),    6 => array('id' => 6, 'pid' => 4, 'name' => '香坊区'),    7 => array('id' => 7, 'pid' => 4, 'name' => '南岗区'),    8 => array('id' => 8, 'pid' => 6, 'name' => '和兴路'),    9 => array('id' => 9, 'pid' => 7, 'name' => '西大直街'),    10 => array('id' => 10, 'pid' => 8, 'name' => '东北林业大学'),    11 => array('id' => 11, 'pid' => 9, 'name' => '哈尔滨工业大学'),    12 => array('id' => 12, 'pid' => 8, 'name' => '哈尔滨师范大学'),    13 => array('id' => 13, 'pid' => 1, 'name' => '赣州市'),    14 => array('id' => 14, 'pid' => 13, 'name' => '赣县'),    15 => array('id' => 15, 'pid' => 13, 'name' => '于都县'),    16 => array('id' => 16, 'pid' => 14, 'name' => '茅店镇'),    17 => array('id' => 17, 'pid' => 14, 'name' => '大田乡'),    18 => array('id' => 18, 'pid' => 16, 'name' => '义源村'),    19 => array('id' => 19, 'pid' => 16, 'name' => '上坝村'),);echo "<pre>";print_r(genTree($items,0));?>

遍历下目录文件

<?php//递归方法遍历function scanFiles1($path){        $files = [];        if($handle = opendir($path)){            while($afile = readdir($handle)){                if($afile == '.' || $afile == '..') continue;                $apath = $path . DIRECTORY_SEPARATOR . $afile;                if(is_dir($apath)){                    $files[$afile] = call_user_func([$this, 'scanFiles1'], $apath);                }else{                    $files[] = $afile;                }            }        }        return $files;    }    function scanFiles2($path){        $files = [];        if($list = scandir($path)){            foreach($list as $afile){                if($afile == '.' || $afile == '..') continue;                $apath = $path . DIRECTORY_SEPARATOR . $afile;                if(is_dir($apath)){                    $files[$afile] = call_user_func([$this, 'scanFiles2'], $apath);                }else{                    $files[] = $afile;                }            }        }        return $files;    }

获取两个数组中的相同元素(值与类型都相同)

function getSameElement($arr1, $arr2){    $arr = [];    foreach($arr1 as $v){        if(in_array($v, $arr2, true) && !in_array($v, $arr, true)){            $arr[] = $v;        }    }    return $arr;}
0 0