Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 - Fatal编程技术网

PHP分割数据范围以仅获得块自由

PHP分割数据范围以仅获得块自由,php,Php,我在整个月的数组中有一个数据范围: $fullrange = array( "start" => "2019-12-01 00:00:00", "end" => "2019-12-31 23:59:59" ) 现在我在我的活动中进行搜索,得到如下结果: $array_activities = array( 0 => array( "ID" => 45, "Name" => "Activity 1", "start

我在整个月的数组中有一个数据范围:

$fullrange = array(
   "start" => "2019-12-01 00:00:00",
   "end" => "2019-12-31 23:59:59"
)
现在我在我的活动中进行搜索,得到如下结果:

$array_activities = array(
  0 => array(
      "ID" => 45,
      "Name" => "Activity 1",
      "start" => "2019-12-04 10:00:00",
      "end" => "2019-12-05 17:00:00"
  ),
  1 => array(
      "ID" => 46,
      "Name" => "Activity 2",
      "start" => "2019-12-07 09:00:00",
      "end" => "2019-12-07 17:40:00"
  ),
  2 => array(
      "ID" => 65,
      "Name" => "Activity 3",
      "start" => "2019-12-10 10:00:00",
      "end" => "2019-12-15 17:00:00"
  ),
  3 => array(
      "ID" => 87,
      "Name" => "Activity 3-2",
      "start" => "2019-12-11 08:00:00",
      "end" => "2019-12-17 21:00:00"
  )

);
我的目标是创建一个新的数组:
$final
,其中包含原始数据范围(整个月)的所有免费数据块,并且没有任何活动,因此:

$final = array(
  0 => array(
      "start" => "2019-12-01 00:00:00",
      "end" => "2019-12-04 09:59:59"
  ),
  1 => array(
      "start" => "2019-12-05 17:00:01",
      "end" => "2019-12-07 08:59:59"
  ),
  2 => array(
      "start" => "2019-12-07 17:40:01",
      "end" => "2019-12-10 09:59:59"
  ),
  3 => array(
      "start" => "2019-12-17 21:00:01",
      "end" => "2019-12-31 23:59:59"
  )

);
但我不太确定如何执行逻辑。

$startDateInTimestamp=\DateTime::createFromFormat('Y-m-d H:i:s',$fullrange['start'])->getTimestamp();
$startDateInTimestamp = \DateTime::createFromFormat('Y-m-d H:i:s', $fullrange['start'])->getTimestamp();
$endDateInTimestamp  = \DateTime::createFromFormat('Y-m-d H:i:s', $fullrange['end'])->getTimestamp();
function sortBy($a, $b, $value) {
    return \DateTime::createFromFormat('Y-m-d H:i:s', $a[$value])->getTimestamp() - \DateTime::createFromFormat('Y-m-d H:i:s', $b[$value])->getTimestamp();
}

function sortByStart($a, $b) 
{
    return sortBy($a, $b, 'start');
}
function sortByEnd($a, $b) 
{
    return sortBy($a, $b, 'end');
}
usort($array_activities, 'sortByStart');
$index = 0;
$final = [];
$final[0]['startDate'] = date('Y-m-d H:i:s', $startDateInTimestamp);
while (count($array_activities) > 0) {
    $array_activities = array_values($array_activities);
    $final[$index]['endDate'] = $array_activities[0]['start'];
    unset($array_activities[0]['start']);
    usort($array_activities, 'sortByEnd');
    $index++;
    $final[$index]['startDate'] = $array_activities[0]['end'];
    unset($array_activities[0]['end']);
    if(!isset($array_activities[0]['end']) && !isset($array_activities[0]['start']))     {
        unset($array_activities[0]);
    }
    usort($array_activities, 'sortByStart');
}
$final[count($final)-1]['endDate'] = date('Y-m-d H:i:s', $endDateInTimestamp);


echo "<pre>";
print_r($final);
echo "</pre>";
$endDateInTimestamp=\DateTime::createFromFormat('Y-m-d H:i:s',$fullrange['end'])->getTimestamp(); 函数排序($a,$b,$value){ return\DateTime::createFromFormat('Y-m-d H:i:s',$a[$value])->getTimestamp()-\DateTime::createFromFormat('Y-m-d H:i:s',$b[$value])->getTimestamp(); } 函数排序系统启动($a,$b) { 返回排序($a,$b,'start'); } 函数排序日期($a,$b) { 返回排序($a,$b,'end'); } usort($array_activities,'sortByStart'); $index=0; $final=[]; $final[0]['startDate']=日期('Y-m-d H:i:s',$startDateInTimestamp); while(计数($array_活动)>0){ $array\u activities=array\u值($array\u activities); $final[$index]['endDate']=$array_activities[0]['start']; 未设置($array_activities[0]['start']); usort($array_activities,'sortByEnd'); $index++; $final[$index]['startDate']=$array_activities[0]['end']; 未设置($array_activities[0]['end']); 如果(!isset($array_activities[0]['end'])和(&!isset($array_activities[0]['start'])){ 未设置($array_activities[0]); } usort($array_activities,'sortByStart'); } $final[count($final)-1]['endDate']=日期('Y-m-d H:i:s',$endDateInTimestamp); 回声“; 打印(最终版); 回声“;
在SQL中这样做可能更容易…@ADyson mhh我需要在纯PHP中这样做,请共享您正在使用的代码。有没有任何尝试来解决这个问题?@NicoHaase我在我的新的post wi示例结果中解释得更好:“我需要用纯php实现它”…因为?这听起来像是一个任意的限制。是什么阻止了您使用SQL?