PHP函数给出了意外输出


php function gives unexpected output

我试图在一个键和值数组中计算单词"online"

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

在返回$a时打印"online"5次,但是当$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

很抱歉问题不完整

这是递归。所以当递归回到之前的状态时它也会回到之前的值所以你失去了$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);