2016-12-13 5 views
0

Я попытался смешать несколько функций php, чтобы получить все даты между несколькими диапазонами дат.Возврат всех дат между несколькими диапазонами дат

Сначала я использовал функцию:

public function getDatesForArray($id){ 
     return $this->sqlQuery("SELECT date_from, date_to FROM bn_prereservation WHERE 
     oid='".$id."' AND status='ACCEPT' ORDER BY date_from ASC"); 
} 

, чтобы получить все диапазоны данных из моей базы данных. И я получаю что-то вроде этого:

Array 
(
[0] => Array 
    (
     [date_from] => 2016-12-05 
     [date_to] => 2016-12-08 
    ) 

[1] => Array 
    (
     [date_from] => 2016-12-11 
     [date_to] => 2016-12-13 
    ) 
) 

А рядом я использовал вторую функцию, которым должна возвращать все даты между диапазонами эти данные:

public function getReserv2($id){ 
     $dates = $this->getDatesforArray($id); 
     $array = array(); 

     foreach($dates as list($start, $end)) { 
      $format = 'Y-m-d'; 
      $interval = new DateInterval('P1D'); 
      $realStart = new DateTime($start); 
      $realEnd = new DateTime($end); 
      $realEnd->add($interval); 


      $period = new DatePeriod($realStart, $interval, ($realEnd)); 

      foreach($period as $date) { 
       $array[] = $date->format($format); 
      } 
     } 
     return $array; 
} 

Я ожидаю, я получаю что-то вроде этого:

2016-12-05 
2016-12-06 
2016-12-07 
2016-12-08 
2016-12-11 
2016-12-12 
2016-12-13 

Но я только получаю:

2016-12-13 
2016-12-13 

Любые идеи?

+0

'list' проблема/ошибка здесь. Я напишу вам ответ. – Jeff

ответ

0

Docs От:

список() работает только на числовых массивов и принимает числовые индексы начинаются с 0.

Вы пытаетесь "извлечь" ассоциативный массив здесь:

foreach($dates as list($start, $end)) 

приводит к E_NOTICE Undefined смещение
(. Я предполагаю, что вы превратили, что в выключенном состоянии)

Итак, чтобы решить вашу проблему, что делать:

function getReserv2($id){ 
    $dates = $this->getDatesforArray($id); 
    $array = array(); 

    foreach($dates as $d) { 
    // print_r($d); 
    // list($start, $end) = $d; // THIS WONT WORK 
     $format = 'Y-m-d'; 
     $interval = new DateInterval('P1D'); 
     $realStart = new DateTime($d['date_from']); // get it directly from the array here 
     $realEnd = new DateTime($d['date_to']); 
     $realEnd->add($interval); 

     $period = new DatePeriod($realStart, $interval, ($realEnd)); 

     foreach($period as $date) { 
      $array[] = $date->format($format); 
     } 
    } 
    return $array; 
} 

результат:

array(7) { 
    [0]=> 
    string(10) "2016-12-05" 
    [1]=> 
    string(10) "2016-12-06" 
    [2]=> 
    string(10) "2016-12-07" 
    [3]=> 
    string(10) "2016-12-08" 
    [4]=> 
    string(10) "2016-12-11" 
    [5]=> 
    string(10) "2016-12-12" 
    [6]=> 
    string(10) "2016-12-13" 
} 
+0

Для меня это работает после в $ d. [] Я использовал двойные кавычки. Например $ d. ["Date_from"]. Но после того, как я сделал это небольшое изменение, он работает Perfect. Благодарю. –

+0

добро пожаловать! Да, это не имеет никакого значения, если вы используете двойные или одинарные кавычки, я просто привык к синглам. – Jeff

+0

Если это сработало для вас, вы можете принять этот ответ. – Jeff

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