php函数提供意外输出

时间:2016-08-29 11:02:03

标签: php function multidimensional-array

我正在尝试用键和值来计算数组中的“在线”一词。

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时打印“在线”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

对不完整的问题感到抱歉。

1 个答案:

答案 0 :(得分: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);