3v4l.org

run code in 300+ PHP versions simultaneously
<?php $str = "abababas"; $d1 = []; $d2 = []; $l = 0; $r = -1; for ($i = 0, $n = strlen($str); $i < $n; $i++) { $k = ($i > $r ? 1 : min($d1[$l + $r - $i], $r - $i)); while ($i - $k >= 0 && $i + $k < $n && $str[$i - $k] == $str[$i + $k]) { $k++; } $d1[$i] = $k; if ($i + $k - 1 > $r) { $l = $i - $k + 1; $r = $i + $k - 1; } } $l = 0; $r = -1; for ($i = 0; $i < $n; $i++) { $k = ($i > $r ? 0 : min($d2[$l + $r - $i - 1], $r - $i)); while ($i - $k >= 0 && $i + $k + 1 < $n && $str[$i - $k] == $str[$i + $k + 1]) { $k++; } $d2[$i] = $k; if ($i + $k > $r) { $l = $i - $k + 1; $r = $i + $k; } } var_dump($d2);
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 42) Position 1 = 52
Branch analysis from position: 52
2 jumps found. (Code = 44) Position 1 = 54, Position 2 = 9
Branch analysis from position: 54
1 jumps found. (Code = 42) Position 1 = 102
Branch analysis from position: 102
2 jumps found. (Code = 44) Position 1 = 104, Position 2 = 58
Branch analysis from position: 104
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 58
2 jumps found. (Code = 43) Position 1 = 60, Position 2 = 62
Branch analysis from position: 60
1 jumps found. (Code = 42) Position 1 = 72
Branch analysis from position: 72
1 jumps found. (Code = 42) Position 1 = 75
Branch analysis from position: 75
2 jumps found. (Code = 46) Position 1 = 78, Position 2 = 82
Branch analysis from position: 78
2 jumps found. (Code = 46) Position 1 = 83, Position 2 = 90
Branch analysis from position: 83
2 jumps found. (Code = 44) Position 1 = 91, Position 2 = 74
Branch analysis from position: 91
2 jumps found. (Code = 43) Position 1 = 96, Position 2 = 101
Branch analysis from position: 96
2 jumps found. (Code = 44) Position 1 = 104, Position 2 = 58
Branch analysis from position: 104
Branch analysis from position: 58
Branch analysis from position: 101
Branch analysis from position: 74
2 jumps found. (Code = 46) Position 1 = 78, Position 2 = 82
Branch analysis from position: 78
Branch analysis from position: 82
Branch analysis from position: 90
Branch analysis from position: 82
Branch analysis from position: 62
1 jumps found. (Code = 42) Position 1 = 75
Branch analysis from position: 75
Branch analysis from position: 9
2 jumps found. (Code = 43) Position 1 = 11, Position 2 = 13
Branch analysis from position: 11
1 jumps found. (Code = 42) Position 1 = 22
Branch analysis from position: 22
1 jumps found. (Code = 42) Position 1 = 25
Branch analysis from position: 25
2 jumps found. (Code = 46) Position 1 = 28, Position 2 = 31
Branch analysis from position: 28
2 jumps found. (Code = 46) Position 1 = 32, Position 2 = 38
Branch analysis from position: 32
2 jumps found. (Code = 44) Position 1 = 39, Position 2 = 24
Branch analysis from position: 39
2 jumps found. (Code = 43) Position 1 = 45, Position 2 = 51
Branch analysis from position: 45
2 jumps found. (Code = 44) Position 1 = 54, Position 2 = 9
Branch analysis from position: 54
Branch analysis from position: 9
Branch analysis from position: 51
Branch analysis from position: 24
2 jumps found. (Code = 46) Position 1 = 28, Position 2 = 31
Branch analysis from position: 28
Branch analysis from position: 31
Branch analysis from position: 38
Branch analysis from position: 31
Branch analysis from position: 13
1 jumps found. (Code = 42) Position 1 = 25
Branch analysis from position: 25
filename:       /in/Uc3Rv
function name:  (null)
number of ops:  108
compiled vars:  !0 = $str, !1 = $d1, !2 = $d2, !3 = $l, !4 = $r, !5 = $i, !6 = $n, !7 = $k
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   ASSIGN                                                   !0, 'abababas'
    4     1        ASSIGN                                                   !1, <array>
    5     2        ASSIGN                                                   !2, <array>
    8     3        ASSIGN                                                   !3, 0
    9     4        ASSIGN                                                   !4, -1
   11     5        ASSIGN                                                   !5, 0
          6        STRLEN                                           ~14     !0
          7        ASSIGN                                                   !6, ~14
          8      > JMP                                                      ->52
   12     9    >   IS_SMALLER                                               !4, !5
         10      > JMPZ                                                     ~16, ->13
         11    >   QM_ASSIGN                                        ~17     1
         12      > JMP                                                      ->22
         13    >   INIT_FCALL                                               'min'
         14        ADD                                              ~18     !3, !4
         15        SUB                                              ~19     ~18, !5
         16        FETCH_DIM_R                                      ~20     !1, ~19
         17        SEND_VAL                                                 ~20
         18        SUB                                              ~21     !4, !5
         19        SEND_VAL                                                 ~21
         20        DO_ICALL                                         $22     
         21        QM_ASSIGN                                        ~17     $22
         22    >   ASSIGN                                                   !7, ~17
   13    23      > JMP                                                      ->25
   14    24    >   PRE_INC                                                  !7
   13    25    >   SUB                                              ~25     !5, !7
         26        IS_SMALLER_OR_EQUAL                              ~26     0, ~25
         27      > JMPZ_EX                                          ~26     ~26, ->31
         28    >   ADD                                              ~27     !5, !7
         29        IS_SMALLER                                       ~28     ~27, !6
         30        BOOL                                             ~26     ~28
         31    > > JMPZ_EX                                          ~26     ~26, ->38
         32    >   SUB                                              ~29     !5, !7
         33        FETCH_DIM_R                                      ~30     !0, ~29
         34        ADD                                              ~31     !5, !7
         35        FETCH_DIM_R                                      ~32     !0, ~31
         36        IS_EQUAL                                         ~33     ~30, ~32
         37        BOOL                                             ~26     ~33
         38    > > JMPNZ                                                    ~26, ->24
   16    39    >   ASSIGN_DIM                                               !1, !5
         40        OP_DATA                                                  !7
   17    41        ADD                                              ~35     !5, !7
         42        SUB                                              ~36     ~35, 1
         43        IS_SMALLER                                               !4, ~36
         44      > JMPZ                                                     ~37, ->51
   18    45    >   SUB                                              ~38     !5, !7
         46        ADD                                              ~39     ~38, 1
         47        ASSIGN                                                   !3, ~39
   19    48        ADD                                              ~41     !5, !7
         49        SUB                                              ~42     ~41, 1
         50        ASSIGN                                                   !4, ~42
   11    51    >   PRE_INC                                                  !5
         52    >   IS_SMALLER                                               !5, !6
         53      > JMPNZ                                                    ~45, ->9
   23    54    >   ASSIGN                                                   !3, 0
   24    55        ASSIGN                                                   !4, -1
   26    56        ASSIGN                                                   !5, 0
         57      > JMP                                                      ->102
   27    58    >   IS_SMALLER                                               !4, !5
         59      > JMPZ                                                     ~49, ->62
         60    >   QM_ASSIGN                                        ~50     0
         61      > JMP                                                      ->72
         62    >   INIT_FCALL                                               'min'
         63        ADD                                              ~51     !3, !4
         64        SUB                                              ~52     ~51, !5
         65        SUB                                              ~53     ~52, 1
         66        FETCH_DIM_R                                      ~54     !2, ~53
         67        SEND_VAL                                                 ~54
         68        SUB                                              ~55     !4, !5
         69        SEND_VAL                                                 ~55
         70        DO_ICALL                                         $56     
         71        QM_ASSIGN                                        ~50     $56
         72    >   ASSIGN                                                   !7, ~50
   28    73      > JMP                                                      ->75
   29    74    >   PRE_INC                                                  !7
   28    75    >   SUB                                              ~59     !5, !7
         76        IS_SMALLER_OR_EQUAL                              ~60     0, ~59
         77      > JMPZ_EX                                          ~60     ~60, ->82
         78    >   ADD                                              ~61     !5, !7
         79        ADD                                              ~62     ~61, 1
         80        IS_SMALLER                                       ~63     ~62, !6
         81        BOOL                                             ~60     ~63
         82    > > JMPZ_EX                                          ~60     ~60, ->90
         83    >   SUB                                              ~64     !5, !7
         84        FETCH_DIM_R                                      ~65     !0, ~64
         85        ADD                                              ~66     !5, !7
         86        ADD                                              ~67     ~66, 1
         87        FETCH_DIM_R                                      ~68     !0, ~67
         88        IS_EQUAL                                         ~69     ~65, ~68
         89        BOOL                                             ~60     ~69
         90    > > JMPNZ                                                    ~60, ->74
   31    91    >   ASSIGN_DIM                                               !2, !5
         92        OP_DATA                                                  !7
   32    93        ADD                                              ~71     !5, !7
         94        IS_SMALLER                                               !4, ~71
         95      > JMPZ                                                     ~72, ->101
   33    96    >   SUB                                              ~73     !5, !7
         97        ADD                                              ~74     ~73, 1
         98        ASSIGN                                                   !3, ~74
   34    99        ADD                                              ~76     !5, !7
        100        ASSIGN                                                   !4, ~76
   26   101    >   PRE_INC                                                  !5
        102    >   IS_SMALLER                                               !5, !6
        103      > JMPNZ                                                    ~79, ->58
   38   104    >   INIT_FCALL                                               'var_dump'
        105        SEND_VAR                                                 !2
        106        DO_ICALL                                                 
        107      > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
152.73 ms | 1404 KiB | 17 Q