2016-08-29 4 views
0

Ich versuche, das Wort "online" in einem Array mit Schlüsseln und Werten zu zählen.PHP-Funktion gibt unerwartete Ausgabe

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); 
} 

druckt "online" 5 Mal, wenn $a wiederholte, aber wenn die $ val prints "1" 5-mal. Scheint, dass es den ursprünglichen Wert von $val nimmt, wenn die Funktion aufgerufen wird. Was habe ich falsch gemacht?

$ a ist das Array und es ist wie folgt (mehrdimensionale):

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 

Sorry für die unvollständige Frage.

+1

Was sind die Eingabedaten, mit denen Sie testen? –

+0

@dragoste Es ist etwas wie das Folgende, aber länger. 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 – TAS

+1

Bitte aktualisieren Sie es in Ihrem Post im richtigen Format. –

Antwort

0

Dies ist Rekursion. Wenn die Rekursion zum vorherigen Zustand zurückkehrt, wird sie auch auf vorherige Werte zurückgesetzt, so dass Sie den Status $val verlieren; Sie müssen einfach $val:

zurückgeben
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);