目录:
一:对字符串进行全排列
二:查询一个数的全部因数
三:将多维数组转化为一维数组
四:无限极分类
一,对字符串进行全排列
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 ;
}