3v4l.org

run code in 300+ PHP versions simultaneously
<?php $openTimeslots = ['02-09-2021' => [ '8:00-10:00', '16:00-19:00'], '03-09-2021' => [ '7:00-10:00', '16:15-19:00', '14:00-16:00', '13:00-14:15'], '04-09-2021' => [ '7:15-10:00', '15:15-18:15', '18:30-18:45']]; function intersectTimeslots($timeslots1, $timeslots2) { $newTimeslots = []; if (count($timeslots1) > 0 && count($timeslots2) > 0) { foreach ($timeslots1 as $timeslot1) { [$start1, $finish1] = sscanf(str_replace(':', '', $timeslot1), "%d-%d"); foreach ($timeslots2 as $timeslot2) { [$start2, $finish2] = sscanf(str_replace(':', '', $timeslot2), "%d-%d"); $newStart = max($start1, $start2); $newFinish = min($finish1, $finish2); if ($newStart < $newFinish) { $newTimeslots[] = substr_replace($newStart, ':', -2, 0) . '-' . substr_replace($newFinish, ':', -2, 0); } } } } return $newTimeslots; } $commonTimeslots = array_shift($openTimeslots); foreach ($openTimeslots as $timeslots) { $commonTimeslots = intersectTimeslots($commonTimeslots, $timeslots); } var_export($commonTimeslots);
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 6, Position 2 = 13
Branch analysis from position: 6
2 jumps found. (Code = 78) Position 1 = 7, Position 2 = 13
Branch analysis from position: 7
1 jumps found. (Code = 42) Position 1 = 6
Branch analysis from position: 6
Branch analysis from position: 13
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 13
filename:       /in/P9ZBN
function name:  (null)
number of ops:  18
compiled vars:  !0 = $openTimeslots, !1 = $commonTimeslots, !2 = $timeslots
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   ASSIGN                                                   !0, <array>
   29     1        INIT_FCALL                                               'array_shift'
          2        SEND_REF                                                 !0
          3        DO_ICALL                                         $4      
          4        ASSIGN                                                   !1, $4
   31     5      > FE_RESET_R                                       $6      !0, ->13
          6    > > FE_FETCH_R                                               $6, !2, ->13
   32     7    >   INIT_FCALL                                               'intersecttimeslots'
          8        SEND_VAR                                                 !1
          9        SEND_VAR                                                 !2
         10        DO_FCALL                                      0  $7      
         11        ASSIGN                                                   !1, $7
   31    12      > JMP                                                      ->6
         13    >   FE_FREE                                                  $6
   35    14        INIT_FCALL                                               'var_export'
         15        SEND_VAR                                                 !1
         16        DO_ICALL                                                 
         17      > RETURN                                                   1

Function intersecttimeslots:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 46) Position 1 = 6, Position 2 = 9
Branch analysis from position: 6
2 jumps found. (Code = 43) Position 1 = 10, Position 2 = 74
Branch analysis from position: 10
2 jumps found. (Code = 77) Position 1 = 11, Position 2 = 73
Branch analysis from position: 11
2 jumps found. (Code = 78) Position 1 = 12, Position 2 = 73
Branch analysis from position: 12
2 jumps found. (Code = 77) Position 1 = 27, Position 2 = 71
Branch analysis from position: 27
2 jumps found. (Code = 78) Position 1 = 28, Position 2 = 71
Branch analysis from position: 28
2 jumps found. (Code = 43) Position 1 = 54, Position 2 = 70
Branch analysis from position: 54
1 jumps found. (Code = 42) Position 1 = 27
Branch analysis from position: 27
Branch analysis from position: 70
Branch analysis from position: 71
1 jumps found. (Code = 42) Position 1 = 11
Branch analysis from position: 11
Branch analysis from position: 71
Branch analysis from position: 73
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 73
Branch analysis from position: 74
Branch analysis from position: 9
filename:       /in/P9ZBN
function name:  intersectTimeslots
number of ops:  76
compiled vars:  !0 = $timeslots1, !1 = $timeslots2, !2 = $newTimeslots, !3 = $timeslot1, !4 = $start1, !5 = $finish1, !6 = $timeslot2, !7 = $start2, !8 = $finish2, !9 = $newStart, !10 = $newFinish
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    9     0  E >   RECV                                             !0      
          1        RECV                                             !1      
   11     2        ASSIGN                                                   !2, <array>
   12     3        COUNT                                            ~12     !0
          4        IS_SMALLER                                       ~13     0, ~12
          5      > JMPZ_EX                                          ~13     ~13, ->9
          6    >   COUNT                                            ~14     !1
          7        IS_SMALLER                                       ~15     0, ~14
          8        BOOL                                             ~13     ~15
          9    > > JMPZ                                                     ~13, ->74
   13    10    > > FE_RESET_R                                       $16     !0, ->73
         11    > > FE_FETCH_R                                               $16, !3, ->73
   14    12    >   INIT_FCALL                                               'sscanf'
         13        INIT_FCALL                                               'str_replace'
         14        SEND_VAL                                                 '%3A'
         15        SEND_VAL                                                 ''
         16        SEND_VAR                                                 !3
         17        DO_ICALL                                         $17     
         18        SEND_VAR                                                 $17
         19        SEND_VAL                                                 '%25d-%25d'
         20        DO_ICALL                                         $18     
         21        FETCH_LIST_R                                     $19     $18, 0
         22        ASSIGN                                                   !4, $19
         23        FETCH_LIST_R                                     $21     $18, 1
         24        ASSIGN                                                   !5, $21
         25        FREE                                                     $18
   15    26      > FE_RESET_R                                       $23     !1, ->71
         27    > > FE_FETCH_R                                               $23, !6, ->71
   16    28    >   INIT_FCALL                                               'sscanf'
         29        INIT_FCALL                                               'str_replace'
         30        SEND_VAL                                                 '%3A'
         31        SEND_VAL                                                 ''
         32        SEND_VAR                                                 !6
         33        DO_ICALL                                         $24     
         34        SEND_VAR                                                 $24
         35        SEND_VAL                                                 '%25d-%25d'
         36        DO_ICALL                                         $25     
         37        FETCH_LIST_R                                     $26     $25, 0
         38        ASSIGN                                                   !7, $26
         39        FETCH_LIST_R                                     $28     $25, 1
         40        ASSIGN                                                   !8, $28
         41        FREE                                                     $25
   17    42        INIT_FCALL                                               'max'
         43        SEND_VAR                                                 !4
         44        SEND_VAR                                                 !7
         45        DO_ICALL                                         $30     
         46        ASSIGN                                                   !9, $30
   18    47        INIT_FCALL                                               'min'
         48        SEND_VAR                                                 !5
         49        SEND_VAR                                                 !8
         50        DO_ICALL                                         $32     
         51        ASSIGN                                                   !10, $32
   19    52        IS_SMALLER                                               !9, !10
         53      > JMPZ                                                     ~34, ->70
   20    54    >   INIT_FCALL                                               'substr_replace'
         55        SEND_VAR                                                 !9
         56        SEND_VAL                                                 '%3A'
         57        SEND_VAL                                                 -2
         58        SEND_VAL                                                 0
         59        DO_ICALL                                         $36     
         60        CONCAT                                           ~37     $36, '-'
   21    61        INIT_FCALL                                               'substr_replace'
         62        SEND_VAR                                                 !10
         63        SEND_VAL                                                 '%3A'
         64        SEND_VAL                                                 -2
         65        SEND_VAL                                                 0
         66        DO_ICALL                                         $38     
         67        CONCAT                                           ~39     ~37, $38
   20    68        ASSIGN_DIM                                               !2
   21    69        OP_DATA                                                  ~39
   15    70    > > JMP                                                      ->27
         71    >   FE_FREE                                                  $23
   13    72      > JMP                                                      ->11
         73    >   FE_FREE                                                  $16
   26    74    > > RETURN                                                   !2
   27    75*     > RETURN                                                   null

End of function intersecttimeslots

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
149.53 ms | 1018 KiB | 21 Q