3v4l.org

run code in 300+ PHP versions simultaneously
<?php print_r(createAddressLines('52 BUKIT BATOK EAST AVENUE 5, #26-08 aaaabbbbccccddddeeeeffffgggghhhhi')); function createAddressLines($addressDetail) { $addressLines = [ 'addressLine1' => '', 'addressLine2' => '', 'addressLine3' => '' ]; if (35 >= strlen($addressDetail)) { $addressLines['addressLine1'] = $addressDetail; } else { $addressLineKeys = array_keys($addressLines); $lineIndex = 0; $addressWords = explode(' ', $addressDetail); print_r($addressWords); foreach ($addressWords as $addressWord) { $currentLine = $addressLines[$addressLineKeys[$lineIndex]]; // Doesn't Fit in Current Line if (35 < strlen($currentLine) + 1 + strlen($addressWord)) { // Case where a Word Itself Exceed 35 Characters if (35 <= strlen($addressWord)) { if (2 > $lineIndex) { $addressLines[$addressLineKeys[$lineIndex]] .= ' ' . substr($addressWord, 0, 34 - strlen($addressLines[$addressLineKeys[$lineIndex]])); $lineIndex += 1; $addressLines[$addressLineKeys[$lineIndex]] .= ' ' . substr($addressWord, 35 - strlen($addressLines[$addressLineKeys[$lineIndex]])); continue; } } // Last Word on Line 3 if ($lineIndex == 2) { $addressLines[$addressLineKeys[$lineIndex]] .= ' ' . substr($addressWord, 0, 34 - strlen($addressLines[$addressLineKeys[$lineIndex]])); } // Go Next Line $lineIndex += 1; // Break if 3 Lines are Maxed if (3 <= $lineIndex) { break; } } $addressLines[$addressLineKeys[$lineIndex]] .= ' ' . $addressWord; } } return (object) $addressLines; }
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/KXLeC
function name:  (null)
number of ops:  7
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   INIT_FCALL                                               'print_r'
          1        INIT_FCALL_BY_NAME                                       'createAddressLines'
          2        SEND_VAL_EX                                              '52+BUKIT+BATOK+EAST+AVENUE+5%2C+%2326-08+aaaabbbbccccddddeeeeffffgggghhhhi'
          3        DO_FCALL                                      0  $0      
          4        SEND_VAR                                                 $0
          5        DO_ICALL                                                 
   49     6      > RETURN                                                   1

Function createaddresslines:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 5, Position 2 = 8
Branch analysis from position: 5
1 jumps found. (Code = 42) Position 1 = 89
Branch analysis from position: 89
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 8
2 jumps found. (Code = 77) Position 1 = 22, Position 2 = 88
Branch analysis from position: 22
2 jumps found. (Code = 78) Position 1 = 23, Position 2 = 88
Branch analysis from position: 23
2 jumps found. (Code = 43) Position 1 = 32, Position 2 = 83
Branch analysis from position: 32
2 jumps found. (Code = 43) Position 1 = 35, Position 2 = 64
Branch analysis from position: 35
2 jumps found. (Code = 43) Position 1 = 37, Position 2 = 64
Branch analysis from position: 37
1 jumps found. (Code = 42) Position 1 = 22
Branch analysis from position: 22
Branch analysis from position: 64
2 jumps found. (Code = 43) Position 1 = 66, Position 2 = 79
Branch analysis from position: 66
2 jumps found. (Code = 43) Position 1 = 82, Position 2 = 83
Branch analysis from position: 82
1 jumps found. (Code = 42) Position 1 = 88
Branch analysis from position: 88
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 83
1 jumps found. (Code = 42) Position 1 = 22
Branch analysis from position: 22
Branch analysis from position: 79
Branch analysis from position: 64
Branch analysis from position: 83
Branch analysis from position: 88
Branch analysis from position: 88
filename:       /in/KXLeC
function name:  createAddressLines
number of ops:  92
compiled vars:  !0 = $addressDetail, !1 = $addressLines, !2 = $addressLineKeys, !3 = $lineIndex, !4 = $addressWords, !5 = $addressWord, !6 = $currentLine
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    5     0  E >   RECV                                             !0      
    7     1        ASSIGN                                                   !1, <array>
   13     2        STRLEN                                           ~8      !0
          3        IS_SMALLER_OR_EQUAL                                      ~8, 35
          4      > JMPZ                                                     ~9, ->8
   14     5    >   ASSIGN_DIM                                               !1, 'addressLine1'
          6        OP_DATA                                                  !0
          7      > JMP                                                      ->89
   16     8    >   INIT_FCALL                                               'array_keys'
          9        SEND_VAR                                                 !1
         10        DO_ICALL                                         $11     
         11        ASSIGN                                                   !2, $11
   17    12        ASSIGN                                                   !3, 0
   18    13        INIT_FCALL                                               'explode'
         14        SEND_VAL                                                 '+'
         15        SEND_VAR                                                 !0
         16        DO_ICALL                                         $14     
         17        ASSIGN                                                   !4, $14
   19    18        INIT_FCALL                                               'print_r'
         19        SEND_VAR                                                 !4
         20        DO_ICALL                                                 
   20    21      > FE_RESET_R                                       $17     !4, ->88
         22    > > FE_FETCH_R                                               $17, !5, ->88
   21    23    >   FETCH_DIM_R                                      ~18     !2, !3
         24        FETCH_DIM_R                                      ~19     !1, ~18
         25        ASSIGN                                                   !6, ~19
   23    26        STRLEN                                           ~21     !6
         27        ADD                                              ~22     ~21, 1
         28        STRLEN                                           ~23     !5
         29        ADD                                              ~24     ~22, ~23
         30        IS_SMALLER                                               35, ~24
         31      > JMPZ                                                     ~25, ->83
   25    32    >   STRLEN                                           ~26     !5
         33        IS_SMALLER_OR_EQUAL                                      35, ~26
         34      > JMPZ                                                     ~27, ->64
   26    35    >   IS_SMALLER                                               !3, 2
         36      > JMPZ                                                     ~28, ->64
   27    37    >   FETCH_DIM_R                                      ~29     !2, !3
         38        INIT_FCALL                                               'substr'
         39        SEND_VAR                                                 !5
         40        SEND_VAL                                                 0
         41        FETCH_DIM_R                                      ~31     !2, !3
         42        FETCH_DIM_R                                      ~32     !1, ~31
         43        STRLEN                                           ~33     ~32
         44        SUB                                              ~34     34, ~33
         45        SEND_VAL                                                 ~34
         46        DO_ICALL                                         $35     
         47        CONCAT                                           ~36     '+', $35
         48        ASSIGN_DIM_OP                .=               8          !1, ~29
         49        OP_DATA                                                  ~36
   28    50        ASSIGN_OP                                     1          !3, 1
   29    51        FETCH_DIM_R                                      ~38     !2, !3
         52        INIT_FCALL                                               'substr'
         53        SEND_VAR                                                 !5
         54        FETCH_DIM_R                                      ~40     !2, !3
         55        FETCH_DIM_R                                      ~41     !1, ~40
         56        STRLEN                                           ~42     ~41
         57        SUB                                              ~43     35, ~42
         58        SEND_VAL                                                 ~43
         59        DO_ICALL                                         $44     
         60        CONCAT                                           ~45     '+', $44
         61        ASSIGN_DIM_OP                .=               8          !1, ~38
         62        OP_DATA                                                  ~45
   30    63      > JMP                                                      ->22
   34    64    >   IS_EQUAL                                                 !3, 2
         65      > JMPZ                                                     ~46, ->79
   35    66    >   FETCH_DIM_R                                      ~47     !2, !3
         67        INIT_FCALL                                               'substr'
         68        SEND_VAR                                                 !5
         69        SEND_VAL                                                 0
         70        FETCH_DIM_R                                      ~49     !2, !3
         71        FETCH_DIM_R                                      ~50     !1, ~49
         72        STRLEN                                           ~51     ~50
         73        SUB                                              ~52     34, ~51
         74        SEND_VAL                                                 ~52
         75        DO_ICALL                                         $53     
         76        CONCAT                                           ~54     '+', $53
         77        ASSIGN_DIM_OP                .=               8          !1, ~47
         78        OP_DATA                                                  ~54
   38    79    >   ASSIGN_OP                                     1          !3, 1
   40    80        IS_SMALLER_OR_EQUAL                                      3, !3
         81      > JMPZ                                                     ~56, ->83
   41    82    > > JMP                                                      ->88
   44    83    >   FETCH_DIM_R                                      ~57     !2, !3
         84        CONCAT                                           ~59     '+', !5
         85        ASSIGN_DIM_OP                .=               8          !1, ~57
         86        OP_DATA                                                  ~59
   20    87      > JMP                                                      ->22
         88    >   FE_FREE                                                  $17
   48    89    >   CAST                                          8  ~60     !1
         90      > RETURN                                                   ~60
   49    91*     > RETURN                                                   null

End of function createaddresslines

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
149.57 ms | 1404 KiB | 21 Q