2016-08-29 36 views
0

我試圖用鍵和值來計算數組中的「在線」一詞。php函數給出意想不到的輸出

function p($a){ 
    function printAllVals($a, $val) { 
     if (!is_array($a)) { 
     if ($a == "online"){ 
      $val+=1; 
      echo $val; 
      //echo $a <-- this prints online 5 times 
     } 
      return; 
     } 
     foreach($a as $k => $v) { 
      printAllVals($v, $val); 
     } 
    } 
    printAllVals($a, 0); 
} 

它打印 「在線」 5次迴盪$a的時候,但是當$ VAL打印 「1」 的5倍。 似乎它調用函數時的原始值爲$val。我做錯了什麼?

$ a是陣列和它像以下的(多維):

prod: 
     cluster: 
      csddb: 
       inst_1: online 
       inst_2: online 
      oiddb: 
       inst1: online 
       inst2: offline 
     local: 
      quoid: 
       inst_1: offline 
       inst_2: offline 
      qaprod: 
       inst_1: offline 
       inst_2: offline 

很抱歉的不完整的問題。

+1

什麼是您正在測試的輸入數據? –

+0

@dragoste這是類似於下面的內容,但更長。 PROD: 集羣: csddb: inst_1:在線 inst_2:在線 oiddb: INST1:在線 INST2:下線 地方: quoid: inst_1:下線 inst_2:下線 qaprod: inst_1:下線 inst_2:離線 – TAS

+1

請以適當的格式在您的文章中更新它。 –

回答

0

這是遞歸。所以當遞歸返回到之前的狀態時,它也會回退到以前的值,所以你鬆散的狀態$val;您必須返回$val

function printAllVals($a, $val) { 
     if (!is_array($a)) { 
     if ($a == "online"){ 
      $val+=1; 
      echo $val; 
//   echo $a; 
     } 
      return $val; 
     } 
     foreach($a as $k => $v) { 
      $val = printAllVals($v, $val); 
     } 
     return $val; 
    } 
    printAllVals($a, 0);