2014-11-08 88 views
0
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. 它似乎不正確地返回「嗨」的計數器,但我不知道。PHP:如何從遞歸函數返回值的計數器?

+0

'count()'是一個保留函數!你爲什麼要打印4?!? – Rizier123 2014-11-08 14:56:19

+0

@ Rizier123:我猜是因爲「你好」在該數組中存在4次 – dynamic 2014-11-08 15:08:10

回答

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

+1

我想'$ counter + = count($ value);'應該是'$ counter + = myRecursiveCount($ value);'? – ekad 2014-11-08 14:57:52

+1

非常感謝! – Haroldy 2014-11-08 15:09:39