遞歸函數的無限極分類

WBOY
發布: 2016-08-30 09:36:40
原創
1238 人瀏覽過

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會重新變成空,資料不會累積!

&就是傳的是位址,就是在函數中對該變數的操作都會改變外面的變數值,不然,在函數呼叫結束的時候,這些變數的改變就會消失,只有透過函數回傳才能改變

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!