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预期输出是什么?也发布您的预期输出。。