3v4l.org

run code in 300+ PHP versions simultaneously
<?php $sequences = ["6", "66", "67", "68", "69", "697", "698", "699"]; $data = ["69212345", "6209876544", "697986546"]; function get_longest_subsequence_element(array $sequences, $str){ $sequenceTree = []; $longestSequence = ""; $strLength = strlen($str); $sequences = array_filter($sequences, function($v)use($strLength){ return strlen($v) <= $strLength; }); $sequenceTree = create_sequence_tree($sequences); $longestSequence = search_sequence_tree($sequenceTree, $str, $longestSequence); return $longestSequence; } function create_sequence_tree(array $sequences){ $sequenceTree = []; foreach($sequences as $sequence){ $parts = str_split($sequence); $ref = &$sequenceTree; while($key = array_shift($parts)) $ref = &$ref[$key]; unset($ref); } return $sequenceTree; } function search_sequence_tree(array $sequenceTree, $str, &$longestSequence, &$sequenceTmp = ""){ foreach($sequenceTree as $v => $checkValue){ if(strpos($str, $sequenceTmp . $v) !== FALSE){ $sequenceTmp .= $v; if(strlen($sequenceTmp) > strlen($longestSequence)) $longestSequence = $sequenceTmp; if(!is_null($sequenceTree[$v])) search_sequence_tree($sequenceTree[$v], $str, $longestSequence, $sequenceTmp); else $sequenceTmp = substr($sequenceTmp, 0 ,-1); } } return $longestSequence; } foreach($data as $str) { echo get_longest_subsequence_element($sequences, $str) . "<br>"; } ?>
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 3, Position 2 = 11
Branch analysis from position: 3
2 jumps found. (Code = 78) Position 1 = 4, Position 2 = 11
Branch analysis from position: 4
1 jumps found. (Code = 42) Position 1 = 3
Branch analysis from position: 3
Branch analysis from position: 11
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 11
filename:       /in/ACvJa
function name:  (null)
number of ops:  13
compiled vars:  !0 = $sequences, !1 = $data, !2 = $str
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   ASSIGN                                                   !0, <array>
    4     1        ASSIGN                                                   !1, <array>
   66     2      > FE_RESET_R                                       $5      !1, ->11
          3    > > FE_FETCH_R                                               $5, !2, ->11
   67     4    >   INIT_FCALL                                               'get_longest_subsequence_element'
          5        SEND_VAR                                                 !0
          6        SEND_VAR                                                 !2
          7        DO_FCALL                                      0  $6      
          8        CONCAT                                           ~7      $6, '%3Cbr%3E'
          9        ECHO                                                     ~7
   66    10      > JMP                                                      ->3
         11    >   FE_FREE                                                  $5
   70    12      > RETURN                                                   1

Function get_longest_subsequence_element:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/ACvJa
function name:  get_longest_subsequence_element
number of ops:  25
compiled vars:  !0 = $sequences, !1 = $str, !2 = $sequenceTree, !3 = $longestSequence, !4 = $strLength
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    7     0  E >   RECV                                             !0      
          1        RECV                                             !1      
    9     2        ASSIGN                                                   !2, <array>
   10     3        ASSIGN                                                   !3, ''
   11     4        STRLEN                                           ~7      !1
          5        ASSIGN                                                   !4, ~7
   13     6        INIT_FCALL                                               'array_filter'
          7        SEND_VAR                                                 !0
          8        DECLARE_LAMBDA_FUNCTION                                  '%00%7Bclosure%7D%2Fin%2FACvJa%3A13%240'
          9        BIND_LEXICAL                                             ~9, !4
   15    10        SEND_VAL                                                 ~9
         11        DO_ICALL                                         $10     
   13    12        ASSIGN                                                   !0, $10
   17    13        INIT_FCALL_BY_NAME                                       'create_sequence_tree'
         14        SEND_VAR_EX                                              !0
         15        DO_FCALL                                      0  $12     
         16        ASSIGN                                                   !2, $12
   18    17        INIT_FCALL_BY_NAME                                       'search_sequence_tree'
         18        SEND_VAR_EX                                              !2
         19        SEND_VAR_EX                                              !1
         20        SEND_VAR_EX                                              !3
         21        DO_FCALL                                      0  $14     
         22        ASSIGN                                                   !3, $14
   20    23      > RETURN                                                   !3
   22    24*     > RETURN                                                   null

End of function get_longest_subsequence_element

Function %00%7Bclosure%7D%2Fin%2FACvJa%3A13%240:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/ACvJa
function name:  {closure}
number of ops:  6
compiled vars:  !0 = $v, !1 = $strLength
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   13     0  E >   RECV                                             !0      
          1        BIND_STATIC                                              !1
   14     2        STRLEN                                           ~2      !0
          3        IS_SMALLER_OR_EQUAL                              ~3      ~2, !1
          4      > RETURN                                                   ~3
   15     5*     > RETURN                                                   null

End of function %00%7Bclosure%7D%2Fin%2FACvJa%3A13%240

Function create_sequence_tree:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 3, Position 2 = 19
Branch analysis from position: 3
2 jumps found. (Code = 78) Position 1 = 4, Position 2 = 19
Branch analysis from position: 4
1 jumps found. (Code = 42) Position 1 = 12
Branch analysis from position: 12
2 jumps found. (Code = 44) Position 1 = 17, Position 2 = 10
Branch analysis from position: 17
1 jumps found. (Code = 42) Position 1 = 3
Branch analysis from position: 3
Branch analysis from position: 10
2 jumps found. (Code = 44) Position 1 = 17, Position 2 = 10
Branch analysis from position: 17
Branch analysis from position: 10
Branch analysis from position: 19
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 19
filename:       /in/ACvJa
function name:  create_sequence_tree
number of ops:  22
compiled vars:  !0 = $sequences, !1 = $sequenceTree, !2 = $sequence, !3 = $parts, !4 = $ref, !5 = $key
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   24     0  E >   RECV                                             !0      
   26     1        ASSIGN                                                   !1, <array>
   28     2      > FE_RESET_R                                       $7      !0, ->19
          3    > > FE_FETCH_R                                               $7, !2, ->19
   29     4    >   INIT_FCALL                                               'str_split'
          5        SEND_VAR                                                 !2
          6        DO_ICALL                                         $8      
          7        ASSIGN                                                   !3, $8
   30     8        ASSIGN_REF                                               !4, !1
   32     9      > JMP                                                      ->12
   33    10    >   FETCH_DIM_W                                      $11     !4, !5
         11        ASSIGN_REF                                               !4, $11
   32    12    >   INIT_FCALL                                               'array_shift'
         13        SEND_REF                                                 !3
         14        DO_ICALL                                         $13     
         15        ASSIGN                                           ~14     !5, $13
         16      > JMPNZ                                                    ~14, ->10
   34    17    >   UNSET_CV                                                 !4
   28    18      > JMP                                                      ->3
         19    >   FE_FREE                                                  $7
   38    20      > RETURN                                                   !1
   40    21*     > RETURN                                                   null

End of function create_sequence_tree

Function search_sequence_tree:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 5, Position 2 = 40
Branch analysis from position: 5
2 jumps found. (Code = 78) Position 1 = 6, Position 2 = 40
Branch analysis from position: 6
2 jumps found. (Code = 43) Position 1 = 14, Position 2 = 39
Branch analysis from position: 14
2 jumps found. (Code = 43) Position 1 = 19, Position 2 = 20
Branch analysis from position: 19
2 jumps found. (Code = 43) Position 1 = 24, Position 2 = 33
Branch analysis from position: 24
1 jumps found. (Code = 42) Position 1 = 39
Branch analysis from position: 39
1 jumps found. (Code = 42) Position 1 = 5
Branch analysis from position: 5
Branch analysis from position: 33
1 jumps found. (Code = 42) Position 1 = 5
Branch analysis from position: 5
Branch analysis from position: 20
Branch analysis from position: 39
Branch analysis from position: 40
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 40
filename:       /in/ACvJa
function name:  search_sequence_tree
number of ops:  43
compiled vars:  !0 = $sequenceTree, !1 = $str, !2 = $longestSequence, !3 = $sequenceTmp, !4 = $checkValue, !5 = $v
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   42     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        RECV                                             !2      
          3        RECV_INIT                                        !3      ''
   44     4      > FE_RESET_R                                       $6      !0, ->40
          5    > > FE_FETCH_R                                       ~7      $6, !4, ->40
          6    >   ASSIGN                                                   !5, ~7
   46     7        INIT_FCALL                                               'strpos'
          8        SEND_VAR                                                 !1
          9        CONCAT                                           ~9      !3, !5
         10        SEND_VAL                                                 ~9
         11        DO_ICALL                                         $10     
         12        TYPE_CHECK                                  1018          $10
         13      > JMPZ                                                     ~11, ->39
   47    14    >   ASSIGN_OP                                     8          !3, !5
   49    15        STRLEN                                           ~13     !3
         16        STRLEN                                           ~14     !2
         17        IS_SMALLER                                               ~14, ~13
         18      > JMPZ                                                     ~15, ->20
   50    19    >   ASSIGN                                                   !2, !3
   52    20    >   FETCH_DIM_R                                      ~17     !0, !5
         21        TYPE_CHECK                                    2  ~18     ~17
         22        BOOL_NOT                                         ~19     ~18
         23      > JMPZ                                                     ~19, ->33
   53    24    >   INIT_FCALL_BY_NAME                                       'search_sequence_tree'
         25        CHECK_FUNC_ARG                                           
         26        FETCH_DIM_FUNC_ARG                               $20     !0, !5
         27        SEND_FUNC_ARG                                            $20
         28        SEND_VAR_EX                                              !1
         29        SEND_VAR_EX                                              !2
         30        SEND_VAR_EX                                              !3
         31        DO_FCALL                                      0          
         32      > JMP                                                      ->39
   55    33    >   INIT_FCALL                                               'substr'
         34        SEND_VAR                                                 !3
         35        SEND_VAL                                                 0
         36        SEND_VAL                                                 -1
         37        DO_ICALL                                         $22     
         38        ASSIGN                                                   !3, $22
   44    39    > > JMP                                                      ->5
         40    >   FE_FREE                                                  $6
   61    41      > RETURN                                                   !2
   63    42*     > RETURN                                                   null

End of function search_sequence_tree

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
151.24 ms | 1411 KiB | 24 Q