2015-10-23 3 views
0

Я пытаюсь создать рекурсивную функцию, которая рассчитывает дату доставки подарка в соответствии с некоторыми предопределенными правилами. 1. Подарок может быть доставлен после одного дня бронирования 2. Если вы забронировали в субботу или воскресенье, то подарок будет отправлен после следующего рабочего дня + 1 день обработки. 3. Конечная дата не может быть в предопределенных отпусках.Рекурсивная функция, не возвращающая ожидаемый результат PHP

Я создал следующую функцию, но вернул мне неправильную дату.

//The delivery date might not be from these dates 
$holidays_selected = array('23-10-2015','24-10-2015','28-10-2015'); 

echo $gift_delivery_date = getGiftDeliveryDate(date('d-m-Y',strtotime('+1 Day')),$holidays_selected); 
//It prints 25-10-2015 what i expect is 27-10-2015 

function getGiftDeliveryDate($asuumed_date,$holidays){ 
     $tomorrow = ''; 
     if (in_array($asuumed_date,$holidays)) { 
      $tomorrow = date('d-m-Y',strtotime($asuumed_date.'+1 Day')); 
      getGiftDeliveryDate($tomorrow,$holidays); 

     } else if (date('N',strtotime($asuumed_date)) == 6) { 
      $tomorrow = date('d-m-Y',strtotime($asuumed_date.'+3 Day')); 
       if(in_array($tomorrow,$holidays)){ 
        $tomorrow = date('d-m-Y',strtotime($tomorrow.'+1 Day')); 
        getGiftDeliveryDate($tomorrow,$holidays); 
       } 
     } else if (date('N',strtotime($asuumed_date)) == 7) { 
      $tomorrow = date('d-m-Y',strtotime($asuumed_date.'+2 Day')); 
       if(in_array($tomorrow,$holidays)){ 
        $tomorrow = date('d-m-Y',strtotime($tomorrow.'+1 Day')); 
        getGiftDeliveryDate($tomorrow,$holidays); 
       } 
     } else { 
      $tomorrow = $asuumed_date; 
     } 

    return $tomorrow; 
} 

Редактировать

Что я ожидал, как выход является 27-10-2015, но он дает 25-10-2015 в качестве конечной продукции

+0

что является вопрос? – FeedTheWeb

+0

Также добавьте ожидаемый и текущий вывод даты. – Daenarys

+0

Вопрос - это функция, которая не ведет себя так, как я ожидаю, поэтому вам нужна помощь, чтобы выяснить, что происходит в функции. –

ответ

1

вы пропустили возвращаемые значения образуют вы действуете

function getGiftDeliveryDate($asuumed_date, $holidays) { 
    if (in_array($asuumed_date, $holidays)) { 
     $tomorrow = date('d-m-Y', strtotime($asuumed_date . '+1 Day')); 
     <b>$tomorrow =</b> getGiftDeliveryDate($tomorrow, $holidays); 

    } else if (date('N', strtotime($asuumed_date)) == 6) { 
     $tomorrow = date('d-m-Y', strtotime($asuumed_date . '+3 Day')); 
     if (in_array($tomorrow, $holidays)) { 
      $tomorrow = date('d-m-Y', strtotime($tomorrow . '+1 Day')); 
      <b>$tomorrow =</b> getGiftDeliveryDate($tomorrow, $holidays); 
     } 
    } else if (date('N', strtotime($asuumed_date)) == 7) { 
     $tomorrow = date('d-m-Y', strtotime($asuumed_date . '+2 Day')); 
     if (in_array($tomorrow, $holidays)) { 
      $tomorrow = date('d-m-Y', strtotime($tomorrow . '+1 Day')); 
      <b>$tomorrow =</b> getGiftDeliveryDate($tomorrow, $holidays); 
     } 
    } else { 
     $tomorrow = $asuumed_date; 
    } 

    return $tomorrow; 
} 
+1

Спасибо, он работает отлично. Но я не мог узнать, где вы делали изменения. Не могли бы вы рассказать мне, где проблема? –

+0

Упс. Я не назначал $ завтра '$ завтра = getGiftDeliveryDate (*****)'. Чувство немого :(Спасибо за вашу помощь –