递归函数:
自己调用自己, 必须要有结束条件。
function digui($n){
echo $n;
if($n>0){
digui($n-1);
}else{
echo'---------';
}
echo $n;
}
digui(3); 输出结果 3210--------0123;
菲波那切数列:
n代表第几列,f(n)代表第n列的值。
// n 1 2 3 4 5 6 7 ......
// f(n) 1 1 2 3 5 8 13 ......
// f(n) = f(n-1) + f(n-2);
function feibo($n){
if($n ==1 ){
return 1;
}elseif($n == 2)
{
return 1;
}
return feibo($n-1) + feibo($n-2);
}
echo feibo(5); 输出结果是5;
递归无限极分类:
$address = [
['id'=>1,'name'=>'昌平','pid'=>2],
['id'=>2,'name'=>'北京','pid'=>0],
['id'=>3,'name'=>'回龙观','pid'=>1],
['id'=>4,'name'=>'通州','pid'=>2],
['id'=>5,'name'=>'潞城','pid'=>4],
['id'=>6,'name'=>'山东','pid'=>0],
['id'=>7,'name'=>'南村镇','pid'=>8],
['id'=>8,'name'=>'市南区','pid'=>9],
['id'=>9,'name'=>'青岛市','pid'=>6],
['id'=>10,'name'=>'市北区','pid'=>9],
];
//子栏目
function findSon($arr,$id=0)
{
$subs=[];
foreach($arr as $v){
if($v['pid']==$id){
$subs[]=$v;
}
}
return $subs;
}
print_r(findSon($address,0));
//子孙栏目(二维数组)
function subtree($arr,$id=0,$lev=1)
{
$subs=[];
foreach($arr as $v){
if($v['pid']==$id){
$v['lev']=$lev;
$subs[]=$v;
$subs = array_merge($subs,subtree($arr,$v['id'],$lev+1));
}
}
return $subs;
}
//子孙栏目(多维数组)
function findSon($menu, $pid=0)
{
$result = array();
foreach($menu as $v) {
if($pid == $v['pid']) {
$v['children'] = $this->findSon($menu, $v['role_id']);
$result[] = $v;
}
}
return $result;
}