2012-06-01 42 views
0

有通常的遞歸功能。它重複兩次 - 第一主迭代和第二次迭代內:特定服務器上的遞歸失敗

function recursive() { 
    global $a, $stop; 

    $stop++; 

    foreach($a as $val) { 
     echo $val; 
     if ($stop < 2) 
      recursive(); 
    } 
} 

$a = array(1,2); 
$stop = 0; 
recursive(); 

結果是1122。一切都是對的。第二次迭代是第一次:1(12)2

我改變了我的服務器和新的服務器回聲112。第二次迭代後第一個循環停止:1(12)
它總是停下來。只有一次迭代是可能的,然後完成。

這臺服務器有什麼問題?它是任何PHP的選擇或什麼?

+0

您使用的是相同的名稱參數'$了'和'全球$ a',這是可疑的行爲可能會在不同版本的PHP中有所不同。儘管現在你編輯了代碼 - 你確定這是你的代碼嗎? – JJJ

+1

爲什麼你使用全局$ a,如果你把它傳遞給函數? –

+0

@Truth我不知道同樣的事情...... – Neal

回答

0

嘗試使用靜態值,而不是全局(這是沒用的,你的情況):

function recursive($a) { 
    static $stop = 0; 

    $stop++; 
    foreach($a as $val) { 
     echo $val; 
     if ($stop < 2) 
      recursive($a); 
    } 
} 

$a = array(1,2); 
recursive($a); 

演示:http://codepad.org/rP7HVKXx

+0

似乎雙方都工作。所以,它是PHP版本特定的。全局工作的地方。但並非無處不在。 – Qiao

+0

@喬你使用全局變量的原因是什麼? – Neal

+0

嗯,他們有時會工作)我明白了 – Qiao