3v4l.org

run code in 300+ PHP versions simultaneously
<?php $rules = [ 'weekly_rate' => 'required, /^\d*\.\d+$/' ]; $_POST['weekly_rate'] = '0.012'; function validate ($rule_bag, $input) { $flag = true; $error_bag = []; foreach ($rule_bag as $item => $rules){ $rules = is_array($rules) ? $rules : array_filter(explode(',', $rules)); foreach($rules as $rule){ $rule = trim($rule); switch(mb_strtolower(trim($rule))){ case 'required': { if (!isset($input[$item])) { $flag = false; !isset($error_bag[$item])?$error_bag[$item]=[]:null; $error_bag[$item][] = $rule; } break; } default: { if (isset($input[$item])){ try { if (!preg_match($rule, $input[$item])){ $flag = false; !isset($error_bag[$item])?$error_bag[$item]=[]:null; !isset($error_bag[$item]['regex'])?$error_bag[$item]['regex']=[]:null; $error_bag[$item]['regex'][] = $rule; } } catch(Exception $e){ echo $e->getMessage(); } } } } } } return $flag ? $flag : $error_bag; } var_dump(validate($rules,$_POST));
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/BujRJ
function name:  (null)
number of ops:  13
compiled vars:  !0 = $rules
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   ASSIGN                                                   !0, <array>
    7     1        FETCH_W                      global              $2      '_POST'
          2        ASSIGN_DIM                                               $2, 'weekly_rate'
          3        OP_DATA                                                  '0.012'
   47     4        INIT_FCALL                                               'var_dump'
          5        INIT_FCALL                                               'validate'
          6        SEND_VAR                                                 !0
          7        FETCH_R                      global              ~4      '_POST'
          8        SEND_VAL                                                 ~4
          9        DO_FCALL                                      0  $5      
         10        SEND_VAR                                                 $5
         11        DO_ICALL                                                 
         12      > RETURN                                                   1

Function validate:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 5, Position 2 = 96
Branch analysis from position: 5
2 jumps found. (Code = 78) Position 1 = 6, Position 2 = 96
Branch analysis from position: 6
2 jumps found. (Code = 43) Position 1 = 9, Position 2 = 11
Branch analysis from position: 9
1 jumps found. (Code = 42) Position 1 = 19
Branch analysis from position: 19
2 jumps found. (Code = 77) Position 1 = 21, Position 2 = 94
Branch analysis from position: 21
2 jumps found. (Code = 78) Position 1 = 22, Position 2 = 94
Branch analysis from position: 22
3 jumps found. (Code = 188) Position 1 = 36, Position 2 = 53, Position 3 = 33
Branch analysis from position: 36
2 jumps found. (Code = 43) Position 1 = 39, Position 2 = 52
Branch analysis from position: 39
2 jumps found. (Code = 43) Position 1 = 43, Position 2 = 47
Branch analysis from position: 43
1 jumps found. (Code = 42) Position 1 = 48
Branch analysis from position: 48
1 jumps found. (Code = 42) Position 1 = 92
Branch analysis from position: 92
1 jumps found. (Code = 42) Position 1 = 21
Branch analysis from position: 21
Branch analysis from position: 47
1 jumps found. (Code = 42) Position 1 = 92
Branch analysis from position: 92
Branch analysis from position: 52
Branch analysis from position: 53
2 jumps found. (Code = 43) Position 1 = 55, Position 2 = 92
Branch analysis from position: 55
2 jumps found. (Code = 43) Position 1 = 62, Position 2 = 87
Branch analysis from position: 62
2 jumps found. (Code = 43) Position 1 = 66, Position 2 = 70
Branch analysis from position: 66
1 jumps found. (Code = 42) Position 1 = 71
Branch analysis from position: 71
2 jumps found. (Code = 43) Position 1 = 76, Position 2 = 81
Branch analysis from position: 76
1 jumps found. (Code = 42) Position 1 = 82
Branch analysis from position: 82
1 jumps found. (Code = 42) Position 1 = 92
Branch analysis from position: 92
Branch analysis from position: 81
1 jumps found. (Code = 42) Position 1 = 92
Branch analysis from position: 92
Branch analysis from position: 70
2 jumps found. (Code = 43) Position 1 = 76, Position 2 = 81
Branch analysis from position: 76
Branch analysis from position: 81
Branch analysis from position: 87
Branch analysis from position: 92
Branch analysis from position: 33
2 jumps found. (Code = 44) Position 1 = 35, Position 2 = 36
Branch analysis from position: 35
1 jumps found. (Code = 42) Position 1 = 53
Branch analysis from position: 53
Branch analysis from position: 36
Branch analysis from position: 94
1 jumps found. (Code = 42) Position 1 = 5
Branch analysis from position: 5
Branch analysis from position: 94
Branch analysis from position: 11
2 jumps found. (Code = 77) Position 1 = 21, Position 2 = 94
Branch analysis from position: 21
Branch analysis from position: 94
Branch analysis from position: 96
2 jumps found. (Code = 43) Position 1 = 98, Position 2 = 100
Branch analysis from position: 98
1 jumps found. (Code = 42) Position 1 = 101
Branch analysis from position: 101
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 100
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 96
Found catch point at position: 88
Branch analysis from position: 88
2 jumps found. (Code = 107) Position 1 = 89, Position 2 = -2
Branch analysis from position: 89
1 jumps found. (Code = 42) Position 1 = 21
Branch analysis from position: 21
filename:       /in/BujRJ
function name:  validate
number of ops:  103
compiled vars:  !0 = $rule_bag, !1 = $input, !2 = $flag, !3 = $error_bag, !4 = $rules, !5 = $item, !6 = $rule, !7 = $e
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    9     0  E >   RECV                                             !0      
          1        RECV                                             !1      
   10     2        ASSIGN                                                   !2, <true>
   11     3        ASSIGN                                                   !3, <array>
   12     4      > FE_RESET_R                                       $10     !0, ->96
          5    > > FE_FETCH_R                                       ~11     $10, !4, ->96
          6    >   ASSIGN                                                   !5, ~11
   13     7        TYPE_CHECK                                  128          !4
          8      > JMPZ                                                     ~13, ->11
          9    >   QM_ASSIGN                                        ~14     !4
         10      > JMP                                                      ->19
         11    >   INIT_FCALL                                               'array_filter'
         12        INIT_FCALL                                               'explode'
         13        SEND_VAL                                                 '%2C'
         14        SEND_VAR                                                 !4
         15        DO_ICALL                                         $15     
         16        SEND_VAR                                                 $15
         17        DO_ICALL                                         $16     
         18        QM_ASSIGN                                        ~14     $16
         19    >   ASSIGN                                                   !4, ~14
   14    20      > FE_RESET_R                                       $18     !4, ->94
         21    > > FE_FETCH_R                                               $18, !6, ->94
   15    22    >   INIT_FCALL                                               'trim'
         23        SEND_VAR                                                 !6
         24        DO_ICALL                                         $19     
         25        ASSIGN                                                   !6, $19
   16    26        INIT_FCALL                                               'mb_strtolower'
         27        INIT_FCALL                                               'trim'
         28        SEND_VAR                                                 !6
         29        DO_ICALL                                         $21     
         30        SEND_VAR                                                 $21
         31        DO_ICALL                                         $22     
         32      > SWITCH_STRING                                            $22, [ 'required':->36, ], ->53
   17    33    >   CASE                                                     $22, 'required'
         34      > JMPNZ                                                    ~23, ->36
         35    > > JMP                                                      ->53
   18    36    >   ISSET_ISEMPTY_DIM_OBJ                         0  ~24     !1, !5
         37        BOOL_NOT                                         ~25     ~24
         38      > JMPZ                                                     ~25, ->52
   20    39    >   ASSIGN                                                   !2, <false>
   21    40        ISSET_ISEMPTY_DIM_OBJ                         0  ~27     !3, !5
         41        BOOL_NOT                                         ~28     ~27
         42      > JMPZ                                                     ~28, ->47
         43    >   ASSIGN_DIM                                       ~29     !3, !5
         44        OP_DATA                                                  <array>
         45        QM_ASSIGN                                        ~30     ~29
         46      > JMP                                                      ->48
         47    >   QM_ASSIGN                                        ~30     null
         48    >   FREE                                                     ~30
   22    49        FETCH_DIM_W                                      $31     !3, !5
         50        ASSIGN_DIM                                               $31
         51        OP_DATA                                                  !6
   24    52    > > JMP                                                      ->92
   27    53    >   ISSET_ISEMPTY_DIM_OBJ                         0          !1, !5
         54      > JMPZ                                                     ~33, ->92
   29    55    >   INIT_FCALL                                               'preg_match'
         56        SEND_VAR                                                 !6
         57        FETCH_DIM_R                                      ~34     !1, !5
         58        SEND_VAL                                                 ~34
         59        DO_ICALL                                         $35     
         60        BOOL_NOT                                         ~36     $35
         61      > JMPZ                                                     ~36, ->87
   30    62    >   ASSIGN                                                   !2, <false>
   31    63        ISSET_ISEMPTY_DIM_OBJ                         0  ~38     !3, !5
         64        BOOL_NOT                                         ~39     ~38
         65      > JMPZ                                                     ~39, ->70
         66    >   ASSIGN_DIM                                       ~40     !3, !5
         67        OP_DATA                                                  <array>
         68        QM_ASSIGN                                        ~41     ~40
         69      > JMP                                                      ->71
         70    >   QM_ASSIGN                                        ~41     null
         71    >   FREE                                                     ~41
   32    72        FETCH_DIM_IS                                     ~42     !3, !5
         73        ISSET_ISEMPTY_DIM_OBJ                         0  ~43     ~42, 'regex'
         74        BOOL_NOT                                         ~44     ~43
         75      > JMPZ                                                     ~44, ->81
         76    >   FETCH_DIM_W                                      $45     !3, !5
         77        ASSIGN_DIM                                       ~46     $45, 'regex'
         78        OP_DATA                                                  <array>
         79        QM_ASSIGN                                        ~47     ~46
         80      > JMP                                                      ->82
         81    >   QM_ASSIGN                                        ~47     null
         82    >   FREE                                                     ~47
   33    83        FETCH_DIM_W                                      $48     !3, !5
         84        FETCH_DIM_W                                      $49     $48, 'regex'
         85        ASSIGN_DIM                                               $49
         86        OP_DATA                                                  !6
         87    > > JMP                                                      ->92
   36    88  E > > CATCH                                       last         'Exception'
   37    89    >   INIT_METHOD_CALL                                         !7, 'getMessage'
         90        DO_FCALL                                      0  $51     
         91        ECHO                                                     $51
         92    >   FREE                                                     $22
   14    93      > JMP                                                      ->21
         94    >   FE_FREE                                                  $18
   12    95      > JMP                                                      ->5
         96    >   FE_FREE                                                  $10
   44    97      > JMPZ                                                     !2, ->100
         98    >   QM_ASSIGN                                        ~52     !2
         99      > JMP                                                      ->101
        100    >   QM_ASSIGN                                        ~52     !3
        101    > > RETURN                                                   ~52
   45   102*     > RETURN                                                   null

End of function validate

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
151.67 ms | 1411 KiB | 26 Q