function fun($pid=0,&$brr=array()){//為什麼去掉&就不行了?
<code>$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;</code>
}
$brr=fun();
echo '
';print_r($brr);
die();//函數傳參中的&$brr=array() &是什麼意思?有什麼作用?
回覆內容:
function fun($pid=0,&$brr=array()){//為什麼去掉&就不行了?
<code>$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;</code>}
$brr=fun();
echo '';print_r($brr);<br>die(); <p>//函數傳參中的&$brr=array() &是什麼意思?有什麼作用? </p> <p class="answer fmt" data-id="1020000006752366"> </p><p>看看手冊的例子你就明白啦&</p> <p class="answer fmt" data-id="1020000006752469"> </p><p>因為&是取引用,當使用了&符號之後,你在函數裡面對參數的修改也會帶到函數外面。而沒有&符號,你在函數裡面對參數的修改,隨著函數結束就結束了。 </p> <pre class="brush:php;toolbar:false"><code>function a1($a) { $a = 20; } function a2(&$a) { $a = 20; } $a = 10; a1($a); var_dump($a); a2($a); var_dump($a);</code>就像上面的程式碼一樣,輸出依序是10, 20。因為a2使用了&符號,所以在a2裡面對$a的修改也影響到了實際傳給a2的$a。
無限極分類需要有一個可以累積的數組,類似static,如果去掉&,每次遞歸的$array會重新變成空,資料不會累積!
&就是傳的是位址,就是在函數中對該變數的操作都會改變外面的變數值,不然,在函數呼叫結束的時候,這些變數的改變就會消失,只有透過函數回傳才能改變