2016-08-09 1 views
0

Я пишу код на PHP, чтобы найти следующий рабочий день с отключенными днями. Это мой код:PHP-функция показывает результат, но не возвращает его

function find_next_day($today,$days_array) { 
    $day = new DateTime($today); 
    $tomorrow = $day->modify('+1 day'); 
    $result = $tomorrow->format('Y-m-d'); 
    if (!in_array($result,$days_array)) { 
     return $result; 
    } else { 
     find_next_day($result,$days_array); 
    } 
} 

$off_days = array('2016-08-10','2016-08-25','2016-08-09','2016-08-11'); 
echo find_next_day('2016-08-09',$off_days); // I must get returned value as 2016-08-12 

Это действительно странно, что функция ничего не возвращает. Но если я положил echo $result перед возвратом значения в функцию, я правильно вижу конечный результат!
Какая у меня ошибка?

+6

'return find_next_day ...' –

+1

Ваше возвращение не должно быть похоронено в инструкции IF. Если вы хотите, чтобы функция возвращала что-то, она должна возвращать ее все время. – durbnpoisn

ответ

2

Проблема заключается в том, что вы не возвращает результат в функции в else заявлении.

function find_next_day($today,$days_array) { 
    $day = new DateTime($today); 
    $tomorrow = $day->modify('+1 day'); 
    $result = $tomorrow->format('Y-m-d'); 
    if (!in_array($result,$days_array)) { 
     return $result; 
    } else { 
     return find_next_day($result,$days_array); 
    } 
} 

Попробуйте этот вариант. Должно сработать.

+0

Спасибо @CoderDude за вашу быструю помощь. –

+0

@MohammadSaberi вы также должны убедиться, что есть возвращаемое по умолчанию значение, а не инкапсулировать их в 'if else'. Если ваша проблема решена, вы можете принять ответ в качестве решения. –

1

Вы также должны return find_next_day();

.... 
} else { 
    return find_next_day($result,$days_array); 
} 
.... 
+0

Спасибо @mmm за руководство. –

0

Ответы, на которые вы должны ответить return find_next_day(...), верны. Однако здесь вам не нужна рекурсивная функция. Рекурсивные алгоритмы предназначены для пересечения ветвящихся/вложенных иерархий, где вы не знаете, насколько глубока ветвление/вложенность. В этом случае вы просто хотите оценить линейную серию дат.

Я рекомендую вам использовать простой цикл while, чтобы проверить каждую дату, чтобы увидеть, является ли это выходным днем ​​(возможно, с пределом 365 приращений до $day).

 Смежные вопросы

  • Нет связанных вопросов^_^