PHP:如何从递归函数返回值的计数器?

时间:2014-11-08 14:53:37

标签: php arrays

function count($array){ 

    $counter=0;
    foreach($array as $key=>$value){ 
    if(is_array($value)){ 
            count($value); 
        }else{
            if(strcmp($value, "Hi") == 0){
                $counter++;
            }
        }
    }
}

$arrays = array("Hi", "a", "Hi", "b", "c", array("c", "Hi", array("Hi"), "d"));

如果我拨打count($arrays);我想在这种情况下打印4 但我的代码保持打印0。 它似乎没有正确地返回“嗨”的反击,但我不知道。

1 个答案:

答案 0 :(得分:3)

count()是PHP的内置函数,如果更改名称,则更好:

function myRecursiveCount($array, $needle = "Hi"){ 
   $counter=0;
   foreach($array as $value){ 
     if(is_array($value)){ 
       $counter += myRecursiveCount($value); 
     } else if ($value === $needle){
       $counter++;  
     }
   }
   return $counter;
}

$inputs = array("Hi", "a", "Hi", "b", "c", array("c", "Hi", array("Hi"), "d"));
echo myRecursiveCount($inputs); // Prints 4

您需要进行两次修改:

  • 该函数应返回$counter;
  • 在递归调用中,您应该附加结果:$counter += f();

我还应用了两项可选的改进:

  • 您不需要填充变量$key,因为您不需要它
  • 比较两个字符串,您只需使用==比较运算符(strcmp感觉太旧了)

在键盘上生活:http://codepad.org/ATiKV09d