2015-03-20 2 views
2

я должен получить список событий, каждый день, как это:Помещенного событие по умолчанию между двумя датами

$data = getEvents(); 
$content=''; 
foreach($data as $d) 
{ 
    $content.= $d['date'].' '.$d['ID_Event']."<br />"; 
} 
echo $content; 
-------> 
2015-03-20 1 
2015-03-22 2 
2015-03-23 3 

Я должен проверить, если в этом списке, у меня есть пустой день между каждыми двумя датами, и положить событие по умолчанию с идентификатором = 4, так у меня есть этот результат

2015-03-20 1 
**2015-03-21 4** 
    2015-03-22 2 
    2015-03-23 3 

Благодарности

+0

Вы что-то пробовали? – Rizier123

+0

Да, я попытался рассчитать количество дней между двумя датами, используя функцию diff(), но я не получил никакого результата. – Liza

+0

^Даже если это не сработает, добавьте свои попытки на ваш вопрос! (Также, если у вас есть 2 пустых дня между 2-мя событиями, вам нужно поставить 2x id4 между ними?) – Rizier123

ответ

0
$data = getEvents(); 
$default = 4; 
$content=''; 
foreach($data as $index=>$d) 
{ 
    $date = new DateTime($d['date']); 
    $content.= $d['date'].' '.$d['ID_Event']."<br />"; 

    //check if we have a next event 
    if (isset($data[$index+1])){ 
     //get the date of next event 
     $next = new DateTime($data[$index+1]['date']); 
     //how many days till next event 
     $difference = $date->diff($next)->d; 
     //more then 1 day in between two events 
     if($difference > 1){ 
      //loop through each day difference 
      for($i = 2; $i <= $difference; $i++){ 
       //take the last even date and add one day to it 
       $date->add(new DateInterval('P1D')); 
       //add the new date to content with your default event 
       $content.= $date->format('Y-m-d').' '.$default."<br />"; 
      } 
     } 
    } 
} 
echo $content; 
+0

спасибо за ваш ответ :) но что будет по умолчанию событием? вот так ?? $ content. = $ data [$ index] ['date']. "4
"; это не работает – Liza

+0

Так как у меня нет тестовых данных, я не смог проверить его. Но это должно быть почти все, что вам нужно. –

+0

Теперь он работает. Большое спасибо – Liza

1

Это должно работать для вас:

(Здесь я сначала сортирую массив $data на дату с usort() после этого создаю new DatePeriod() для всех дат между началом и концом. Я только простой цикл через все даты, и если он находится в $data массиве я добавить его в $output массив иначе я сделать элемент с EventID 4. И в конце концов, я просто распечатать данные)

<?php 

    $data = getEvents(); 
    usort($data, function($a, $b){ 
     return strtotime($a["date"]) > strtotime($b["date"]); 
    }); 

    $start = new DateTime($data[0]["date"]); 
    $interval = new DateInterval('P1D'); 
    $end = (new DateTime($data[count($data)-1]["date"]))->add($interval); 

    $period = new DatePeriod($start, $interval, $end); 

    foreach($period as $date) { 
     if(($key = array_search($date->format("Y-m-d"), array_column($data, "date"))) !== FALSE) 
      $content[] = $data[$key]; 
     else 
      $content[] = ["date" => $date->format("Y-m-d"), "ID_Event" => "4"]; 
    } 

    array_map(function($v){ 
     echo $v['date'] . " " . $v['ID_Event'] . "<br />"; 
    }, $content); 

?> 

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

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