Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将默认事件置于两个日期之间_Php_Datetime - Fatal编程技术网

Php 将默认事件置于两个日期之间

Php 将默认事件置于两个日期之间,php,datetime,Php,Datetime,我每天都要得到一张这样的活动清单: $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 谢谢$data=getEvents(); $default=4; $content=''

我每天都要得到一张这样的活动清单:

$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
谢谢

$data=getEvents();
$default=4;
$content='';
foreach($index=>d的数据)
{
$date=新的日期时间($d['date']);
$content.=$d['date'].'.$d['ID_Event'.]。“
”; //检查我们是否有下一个活动 if(isset($data[$index+1])){ //获取下一事件的日期 $next=newdatetime($data[$index+1]['date']); //离下一个活动还有多少天 $difference=$date->diff($next)->d; //两项活动之间间隔超过1天 如果($difference>1){ //循环查看每天的差异 对于($i=2;$i添加(新日期间隔('P1D')); //使用默认事件将新日期添加到内容中 $content.=$date->format('Y-m-d').'.$default.“
”; } } } } echo$内容;
这应该适合您:

(在这里,我首先按照日期对
$data
数组进行排序,在此之后,我为开始和结束之间的所有日期创建一个数组。我只是简单地循环所有日期,如果它在
$data
数组中,我将它添加到
$output
数组中,否则我将生成一个EventID为4的元素。最后,我只需打印(数据)



您尝试过什么吗?是的,我尝试过使用diff()函数计算两个日期之间的天数,但没有得到任何结果。^即使不起作用,也要将您的尝试添加到您的问题中!(如果两个事件之间有两个空日,您是否需要在两个事件之间放置两个id4?)如果我有两个或两个以上的空日,我必须输入当天的日期+id4,这样我至少可以有一个没有空日的列表。谢谢你的回答:)但是默认事件是什么?像这样???$content.=$data[$index]['date']。“4
”;这不起作用,因为我没有测试数据,所以无法测试。但这应该是您所需要的一切。
  2015-03-20 1
**2015-03-21 4**
  2015-03-22 2
  2015-03-23 3
$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;
<?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);

?>