将日期数组拆分为可用的班次吗?

vimes1984

好的,我有以下内容:

    ["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"]=> string(5) "12:00" ["availhoursend"]=> string(5) "22:00"是可用的工作内容,不可用的数组包含该工作人员已经被预订的小时数。您是否打算将可用时间分为几个部分,以删除已经预订的项目?我尝试在这里使用@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>";

但返回错误:

    ["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的代码的一些排列,但无济于事...

飞溅58

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

foreach($date_sub as $keydates => $valuedates){
    foreach($valuedates->dates as $key => $value){
        $shift = new Ranges(new DateTime($value->availhoursstart), new DateTime($value->availhoursend));

        foreach($value->unavail as $ukey =>$valuesubsub){
// substract unavaiiable time range
            $shift->substract(new Ranges(new DateTime($valuesubsub->start), new DateTime($valuesubsub->end)));
// and remove that range from array
            unset($value->unavail[$ukey]);
        }

        foreach ($shift as $range)
// Add to array as avail
            $valuedates->dates[$key]->avail[] = $range->format('H:i:s');

// Making new unavaliables. Set all open time
        $unavails = new Ranges(new DateTime($value->availhoursstart), new DateTime($value->availhoursend));
// Substract shift ranges
        $unavails->substract($shift);
// Output to array as unavail
        foreach ($unavails as $range)
            $valuedates->dates[$key]->unavail[] = $range->format('H:i:s');
    }
}

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章