基础算法

目录:

   一:对字符串进行全排列

    二:查询一个数的全部因数 

    三:将多维数组转化为一维数组

    四:无限极分类

一,对字符串进行全排列

function test($str,$res_str=''){
    static $res_arr=[];
    $len = strlen($str);
    for($i=0;$i<=$len-1;$i++){
        $new_res_str = $res_str . $str[$i];
        if($len>1){
            $tmp_arr = str_split($str);
            unset($tmp_arr[$i]);//删除该字符
            $new_str = implode($tmp_arr);
            test($new_str,$new_res_str);
        }else{
            if(!in_array($new_res_str,$res_arr)){//存在则跳过
                // echo('结果输出$new_res_str----->'."$new_res_str".'<br>'.'<hr>');
                $res_arr[] = $new_res_str;
            } 
        }
    }
    return $res_arr;
}

$a = test('abcda');
echo count($a);

二,查询一个数的全部因数 

    例如: 输入120  输出: 1,2,35

function child($nums){
    static $arr = [1];
    for($i=2;$i<=$nums;$i++){
        if($i == $nums) $arr[]=$nums;
        if(($nums%$i==0)  && ($nums/$i >1)){
            if(!in_array($i,$arr)){
                $arr[] = $i;
            }
            child($nums/$i);
            return $arr;
        }
    }
}

三:将多维数组转化为一维数组

    //将多维不规则数组转化为一维数组( array_to_one )
    public function array_to_one($array)  
        {  
        //首先定义一个静态数组常量用来保存结果  
        static $result_array = array();  
        //对多维数组进行循环  
        foreach ($array as $value) {  
            //判断是否是数组,如果是递归调用方法  
            if (is_array($value)) {  
                $this->array_to_one($value);  
            } else  //如果不是,将结果放入静态数组常量  
                $result_array [] = $value;  
        }  
        //返回结果(静态数组常量)
        return $result_array;  
    }  

 四:无限极分类

    //无限极分类
    public function sorts($a,$ppid = 0, $nums = 1)
    {

        static $arr = array();
        $num = $nums;
        foreach($a as $k=>$v){
            $v = (array)$v;
            if($v['pid'] == $ppid){
                //将数据存储在此数组下 并在次调用函数
                $v['nums'] = $nums;
                $arr[] = $v;
                $this->sorts($a,  $v['id'], $nums+1);
            }
        }
        return $arr;
    }


    //无限极分类
    public function tree(&$data,$pid = 0,$count = 1)
     {
        //使用此方法需要将pid进行排序 配合unset函数释放已经拍过序列的键值队 可提升效率
        // $taglist = DB::table('tag')->orderBy('pid','desc')->get()->toArray();
      static $treeList = array(); 
        foreach ($data as $key => $value){
            $value = (array)$value;
            if($value['pid']==$pid){
                $value['nums'] = $count;
                $treeList []=$value;
                unset($data[$key]);  
                $this->tree($data,$value['id'],$count+1);
            } 
        }
        return $treeList ;
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值