2014-02-13 4 views
0

Этот фрагмент кода должен найти максимальное значение группы, независимо от того, сколько вложенных массивов есть. Я пытаюсь в первый раз создать функцию, которая будет вызывать себя каждый раз, когда произойдет событие, это значение является массивом. Почему он говорит, что мои переменные не определены?Моя первая рекурсивная функция не вызывает себя правильно?

<?php 
    $arr = array("1", "2", array("3", "4")); 

    function getitMax($arr){ 
     foreach ($arr as $value){ 
      if(is_array($value)){ 
       getitMax($value); 
      } else { 
       $max_array=array($value); 
      } 
     } 
    } 
    getitMax($arr); 

    echo max($max_array); 
?> 
+0

Вы не писал никакого кода. –

+0

4 секунды впереди меня :) – user3291017

+0

в функции вы хотите что-то вернуть, и u ve хранить данные где-то во время вызова функции. Я думаю так. :) –

ответ

1

Ваша проблема заключается в том, что вы просто позвонив функцию здесь:

if(is_array($value)){ 
     getitMax($value); 

} 

бут ничего не делая с его результатом. А также ваша функция не имеет return - то есть результат будет null. Чтобы это исправить, сделать что-то вроде:

function getitMax($arr) 
{ 
    $max = null; 
    foreach($arr as $value) 
    { 
     if(is_array($value)) 
     { 
      $current = getitMax($value); 
     } 
     else 
     { 
      $current = $value; 
     } 
     //assign max to current if current is larger: 
     if($current>$max) 
     { 
      $max = $current; 
     } 
    } 
    return $max; 
} 
0

Try ниже код может быть немного длительный подход:

<?php 
class GetMax { 
    private $max_array = ''; 
    public function getitMax($arr){  
     foreach ($arr as $value){ 
      if(is_array($value)){ 
       $this->getitMax($value); 
      } else { 
       $this->max_array[] = $value; 
      } 
     }  
     return max($this->max_array); 
    } 
} 

$m = new GetMax(); 
$arr = array("1", "2", array("3", "4")); 
echo $m->getitMax($arr); 
?> 
Смежные вопросы