Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.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_Arrays_Date_Datetime - Fatal编程技术网

Php 是否将日期数组拆分为可用班次以进行工作?

Php 是否将日期数组拆分为可用班次以进行工作?,php,arrays,date,datetime,Php,Arrays,Date,Datetime,好的,我有以下几点: ["dates"]=> array(2) { [0]=> object(stdClass)#1322 (4) { ["availday"]=> string(10) "2015-04-23" ["availhoursstart"]=> string(5) "12:00" ["availhoursend"]=> string(5) "22:00" ["unavail"]=&g

好的,我有以下几点:

    ["dates"]=>
array(2) {
  [0]=>
  object(stdClass)#1322 (4) {
    ["availday"]=>
    string(10) "2015-04-23"
    ["availhoursstart"]=>
    string(5) "12:00"
    ["availhoursend"]=>
    string(5) "22:00"
    ["unavail"]=>
    array(4) {
      [0]=>
      object(stdClass)#1326 (2) {
        ["start"]=>
        string(5) "16:00"
        ["end"]=>
        string(5) "17:00"
      }
      [1]=>
      object(stdClass)#1325 (2) {
        ["start"]=>
        string(5) "19:00"
        ["end"]=>
        string(5) "20:00"
      }
      [2]=>
      object(stdClass)#1324 (2) {
        ["start"]=>
        string(5) "20:00"
        ["end"]=>
        string(5) "21:00"
      }
      [3]=>
      object(stdClass)#1327 (2) {
        ["start"]=>
        string(5) "13:00"
        ["end"]=>
        string(5) "14:00"
      }
    }
  }
  [1]=>
  object(stdClass)#1321 (4) {
    ["availday"]=>
    string(10) "2015-04-24"
    ["availhoursstart"]=>
    string(5) "12:00"
    ["availhoursend"]=>
    string(5) "22:00"
    ["unavail"]=>
    array(3) {
      [0]=>
      object(stdClass)#1323 (2) {
        ["start"]=>
        string(5) "16:00"
        ["end"]=>
        string(5) "17:00"
      }
      [1]=>
      object(stdClass)#1328 (2) {
        ["start"]=>
        string(5) "21:00"
        ["end"]=>
        string(5) "22:00"
      }
      [2]=>
      object(stdClass)#1331 (2) {
        ["start"]=>
        string(5) "20:00"
        ["end"]=>
        string(5) "21:00"
      }
    }
  }
}
其中,
[“availhoursstart”]=>字符串(5)“12:00”[“availhoursend”]=>字符串(5)“22:00”
是可用的工作时间,unavail数组包含工作人员已准备就绪的预定小时数。 你认为我应该将可用时间分成几个部分,删除已预订的项目吗? 我试着用@hakre的例子,但我失败了

我试过这个:

                        foreach($date_sub as $keydates => $valuedates){

                        foreach($valuedates->dates as $key => $value){

                                $shift = new Ranges(new DateTime($value->availhoursstart), new DateTime($value->availhoursend));

                                $i = 0;
                                foreach($value->unavail as $keysubsub => $valuesubsub){

                                    $unavails[$i] = new Range(new DateTime($valuesubsub->start), new DateTime($valuesubsub->end));

                                        $i++;

                                }


                                $unavailables = new Ranges($unavails[$i]);




                                $shift->substract($unavailables);
                                $x = 0;
                                foreach ($shift as $range) {

                                        $valuedates->dates[$key]->avail[$x] = $range->format('H:i:s');


                                        $x++;

                                }
                        }

                    }

                    echo "<pre>";
                        var_dump( $date_sub );
                    echo "</pre>";

我的预期输出与最后一个代码段非常相似,其中unavail数组包含数组中的不可用时间和可用日期数组。就像我说的,我尝试了一些哈克雷代码的排列,但是没有用

我已经稍微更正了您的代码:)

foreach($date\u sub作为$keydates=>$valuedates){
foreach($valuedates->dates为$key=>$value){
$shift=新范围(新日期时间($value->availhoursstart),新日期时间($value->availhoursend));
foreach($value->unavail as$ukey=>$valuesubsubsub){
//减去不可用的时间范围
$shift->substract(新范围(新日期时间($valuesubsubsub->start),新日期时间($valuesubsubsub->end));
//并从数组中删除该范围
未设置($value->unavail[$ukey]);
}
foreach($shift作为$range)
//添加到阵列作为可用
$valuedates->dates[$key]->avail[]=$range->format('H:i:s');
//创建新的不可用项。设置所有打开时间
$unavails=新范围(新日期时间($value->availhoursstart),新日期时间($value->availhoursend));
//减法移位范围
$unavails->substract($shift);
//作为无效输出到阵列
foreach($范围内的不可用)
$valuedates->dates[$key]->unavail[]=$range->format('H:i:s');
}
}
回声“;
    ["dates"]=>
    array(2) {
      [0]=>
      object(stdClass)#1322 (5) {
        ["availday"]=>
        string(10) "2015-04-23"
        ["availhoursstart"]=>
        string(5) "12:00"
        ["availhoursend"]=>
        string(5) "22:00"
        ["unavail"]=>
        array(4) {
          [0]=>
          object(stdClass)#1326 (2) {
            ["start"]=>
            string(5) "16:00"
            ["end"]=>
            string(5) "17:00"
          }
          [1]=>
          object(stdClass)#1325 (2) {
            ["start"]=>
            string(5) "19:00"
            ["end"]=>
            string(5) "20:00"
          }
          [2]=>
          object(stdClass)#1324 (2) {
            ["start"]=>
            string(5) "20:00"
            ["end"]=>
            string(5) "21:00"
          }
          [3]=>
          object(stdClass)#1327 (2) {
            ["start"]=>
            string(5) "13:00"
            ["end"]=>
            string(5) "14:00"
          }
        }
        ["avail"]=>
        array(1) {
          [0]=>
          array(2) {
            [0]=>
            string(8) "12:00:00"
            [1]=>
            string(8) "22:00:00"
          }
        }
      }
      [1]=>
      object(stdClass)#1321 (5) {
        ["availday"]=>
        string(10) "2015-04-24"
        ["availhoursstart"]=>
        string(5) "12:00"
        ["availhoursend"]=>
        string(5) "22:00"
        ["unavail"]=>
        array(3) {
          [0]=>
          object(stdClass)#1323 (2) {
            ["start"]=>
            string(5) "16:00"
            ["end"]=>
            string(5) "17:00"
          }
          [1]=>
          object(stdClass)#1328 (2) {
            ["start"]=>
            string(5) "21:00"
            ["end"]=>
            string(5) "22:00"
          }
          [2]=>
          object(stdClass)#1331 (2) {
            ["start"]=>
            string(5) "20:00"
            ["end"]=>
            string(5) "21:00"
          }
        }
        ["avail"]=>
        array(2) {
          [0]=>
          array(2) {
            [0]=>
            string(8) "12:00:00"
            [1]=>
            string(8) "13:00:00"
          }
          [1]=>
          array(2) {
            [0]=>
            string(8) "14:00:00"
            [1]=>
            string(8) "22:00:00"
          }
        }
      }
    }
  }
//观察结果 var_dump($date_sub); 回声“;
    ["dates"]=>
    array(2) {
      [0]=>
      object(stdClass)#1322 (5) {
        ["availday"]=>
        string(10) "2015-04-23"
        ["availhoursstart"]=>
        string(5) "12:00"
        ["availhoursend"]=>
        string(5) "22:00"
        ["unavail"]=>
        array(4) {
          [0]=>
          object(stdClass)#1326 (2) {
            ["start"]=>
            string(5) "16:00"
            ["end"]=>
            string(5) "17:00"
          }
          [1]=>
          object(stdClass)#1325 (2) {
            ["start"]=>
            string(5) "19:00"
            ["end"]=>
            string(5) "20:00"
          }
          [2]=>
          object(stdClass)#1324 (2) {
            ["start"]=>
            string(5) "20:00"
            ["end"]=>
            string(5) "21:00"
          }
          [3]=>
          object(stdClass)#1327 (2) {
            ["start"]=>
            string(5) "13:00"
            ["end"]=>
            string(5) "14:00"
          }
        }
        ["avail"]=>
        array(1) {
          [0]=>
          array(2) {
            [0]=>
            string(8) "12:00:00"
            [1]=>
            string(8) "22:00:00"
          }
        }
      }
      [1]=>
      object(stdClass)#1321 (5) {
        ["availday"]=>
        string(10) "2015-04-24"
        ["availhoursstart"]=>
        string(5) "12:00"
        ["availhoursend"]=>
        string(5) "22:00"
        ["unavail"]=>
        array(3) {
          [0]=>
          object(stdClass)#1323 (2) {
            ["start"]=>
            string(5) "16:00"
            ["end"]=>
            string(5) "17:00"
          }
          [1]=>
          object(stdClass)#1328 (2) {
            ["start"]=>
            string(5) "21:00"
            ["end"]=>
            string(5) "22:00"
          }
          [2]=>
          object(stdClass)#1331 (2) {
            ["start"]=>
            string(5) "20:00"
            ["end"]=>
            string(5) "21:00"
          }
        }
        ["avail"]=>
        array(2) {
          [0]=>
          array(2) {
            [0]=>
            string(8) "12:00:00"
            [1]=>
            string(8) "13:00:00"
          }
          [1]=>
          array(2) {
            [0]=>
            string(8) "14:00:00"
            [1]=>
            string(8) "22:00:00"
          }
        }
      }
    }
  }

这个问题的信息有点少。你能分享一下你所做的尝试,以及你遇到的问题吗?我遇到的主要问题是时间重叠,或者至少取决于彼此,我已经经历了@hakre的要点的大约10种排列,这是一些优雅的代码!只是更新了一点info@vimes1984预期输出是什么?也发布您的预期输出。。