递归函数的无限极分类
程序员文章站
2022-04-19 22:55:59
...
function fun($pid=0,&$brr=array()){//为什么去掉&就不行了?
$sql="select * from wuxianji where pid=$pid";
$rs=mysql_query($sql);
while($arr=mysql_fetch_assoc($rs)){
$brr[]=$arr;
fun($pid=$arr['id'],$brr);
}
return $brr;
}
$brr=fun();
echo '
';print_r($brr);
die();//函数传参中的&$brr=array() &是什么意思?有什么作用?
回复内容:
function fun($pid=0,&$brr=array()){//为什么去掉&就不行了?
$sql="select * from wuxianji where pid=$pid"; $rs=mysql_query($sql); while($arr=mysql_fetch_assoc($rs)){ $brr[]=$arr; fun($pid=$arr['id'],$brr); } return $brr;
}
$brr=fun();
echo '';print_r($brr);
die();//函数传参中的&$brr=array() &是什么意思?有什么作用?
看看手册的例子你就明白啦&
因为&是取引用,当使用了&符号之后,你在函数里面对参数的修改也会带到函数外面。而没有&符号,你在函数里面对参数的修改,随着函数结束就结束了。
function a1($a) { $a = 20; } function a2(&$a) { $a = 20; } $a = 10; a1($a); var_dump($a); a2($a); var_dump($a);
就像上面的代码一样,输出依次是10, 20。因为a2使用了&符号,所以在a2里面对$a的修改也影响到了实际传给a2的$a。
无限极分类需要有一个可以累加的数组,类似于static,如果去掉&,每次递归的$array会重新变为空,数据不会累加!
&就是传的是地址,就是在函数中对该变量的操作都会改变外面的变量值,不然,在函数调用结束的时候,这些变量的改变就会消失,只有通过函数返回才能改变
上一篇: 页内跳转(锚点练习)的实例代码
下一篇: python 正文内容提取