PHP: как вернуть счетчик значения из рекурсивной функции?

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. Кажется, он не возвращает счетчик "Привет" правильно, но я понятия не имею.

Теги:
arrays

1 ответ

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); ?
  • 1
    Спасибо вам большое!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню