3v4l.org

run code in 300+ PHP versions simultaneously
<?php function mb_str_pad($str, $pad_len, $pad_str = ' ', $dir = STR_PAD_RIGHT, $encoding = NULL) { $encoding = $encoding === NULL ? mb_internal_encoding() : $encoding; $padBefore = $dir === STR_PAD_BOTH || $dir === STR_PAD_LEFT; $padAfter = $dir === STR_PAD_BOTH || $dir === STR_PAD_RIGHT; $pad_len -= mb_strlen($str, $encoding); $targetLen = $padBefore && $padAfter ? $pad_len / 2 : $pad_len; $strToRepeatLen = mb_strlen($pad_str, $encoding); $repeatTimes = ceil($targetLen / $strToRepeatLen); $repeatedString = str_repeat($pad_str, max(0, $repeatTimes)); // safe if used with valid utf-8 strings $before = $padBefore ? mb_substr($repeatedString, 0, floor($targetLen), $encoding) : ''; $after = $padAfter ? mb_substr($repeatedString, 0, ceil($targetLen), $encoding) : ''; return $before . $str . $after; } // same random testing... foreach([STR_PAD_BOTH, STR_PAD_LEFT, STR_PAD_RIGHT] as $padType) { echo str_pad("FOO", 11, "aeo", $padType) . "\n"; echo mb_str_pad("FOO", 11, "àèò", $padType, "UTF-8") . "\n"; echo str_pad("FOO", 10, "aeo", $padType) . "\n"; echo mb_str_pad("FOO", 10, "àèò", $padType, "UTF-8") . "\n"; echo str_pad("BAAZ", 11, "aeo", $padType) . "\n"; echo mb_str_pad("BAAZ", 11, "àèò", $padType, "UTF-8") . "\n"; echo str_pad("BAAZ", 10, "aeo", $padType) . "\n"; echo mb_str_pad("BAAZ", 10, "àèò", $padType, "UTF-8") . "\n"; echo str_pad("FOOBAR", 6, "aeo", $padType) . "\n"; echo mb_str_pad("FOOBAR", 6, "àèò", $padType, "UTF-8") . "\n"; echo str_pad("FOOBAR", 1, "aeo", $padType) . "\n"; echo mb_str_pad("FOOBAR", 1, "àèò", $padType, "UTF-8") . "\n"; echo str_pad("FOOBAR", 0, "aeo", $padType) . "\n"; echo mb_str_pad("FOOBAR", 0, "àèò", $padType, "UTF-8") . "\n"; echo str_pad("FOOBAR", -10, "aeo", $padType) . "\n"; echo mb_str_pad("FOOBAR", -10, "àèò", $padType, "UTF-8") . "\n"; echo "--\n"; } ?>
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 1, Position 2 = 140
Branch analysis from position: 1
2 jumps found. (Code = 78) Position 1 = 2, Position 2 = 140
Branch analysis from position: 2
1 jumps found. (Code = 42) Position 1 = 1
Branch analysis from position: 1
Branch analysis from position: 140
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 140
filename:       /in/UnXTF
function name:  (null)
number of ops:  142
compiled vars:  !0 = $padType
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   20     0  E > > FE_RESET_R                                       $1      <array>, ->140
          1    > > FE_FETCH_R                                               $1, !0, ->140
   22     2    >   INIT_FCALL                                               'str_pad'
          3        SEND_VAL                                                 'FOO'
          4        SEND_VAL                                                 11
          5        SEND_VAL                                                 'aeo'
          6        SEND_VAR                                                 !0
          7        DO_ICALL                                         $2      
          8        CONCAT                                           ~3      $2, '%0A'
          9        ECHO                                                     ~3
   23    10        INIT_FCALL                                               'mb_str_pad'
         11        SEND_VAL                                                 'FOO'
         12        SEND_VAL                                                 11
         13        SEND_VAL                                                 '%C3%A0%C3%A8%C3%B2'
         14        SEND_VAR                                                 !0
         15        SEND_VAL                                                 'UTF-8'
         16        DO_FCALL                                      0  $4      
         17        CONCAT                                           ~5      $4, '%0A'
         18        ECHO                                                     ~5
   24    19        INIT_FCALL                                               'str_pad'
         20        SEND_VAL                                                 'FOO'
         21        SEND_VAL                                                 10
         22        SEND_VAL                                                 'aeo'
         23        SEND_VAR                                                 !0
         24        DO_ICALL                                         $6      
         25        CONCAT                                           ~7      $6, '%0A'
         26        ECHO                                                     ~7
   25    27        INIT_FCALL                                               'mb_str_pad'
         28        SEND_VAL                                                 'FOO'
         29        SEND_VAL                                                 10
         30        SEND_VAL                                                 '%C3%A0%C3%A8%C3%B2'
         31        SEND_VAR                                                 !0
         32        SEND_VAL                                                 'UTF-8'
         33        DO_FCALL                                      0  $8      
         34        CONCAT                                           ~9      $8, '%0A'
         35        ECHO                                                     ~9
   26    36        INIT_FCALL                                               'str_pad'
         37        SEND_VAL                                                 'BAAZ'
         38        SEND_VAL                                                 11
         39        SEND_VAL                                                 'aeo'
         40        SEND_VAR                                                 !0
         41        DO_ICALL                                         $10     
         42        CONCAT                                           ~11     $10, '%0A'
         43        ECHO                                                     ~11
   27    44        INIT_FCALL                                               'mb_str_pad'
         45        SEND_VAL                                                 'BAAZ'
         46        SEND_VAL                                                 11
         47        SEND_VAL                                                 '%C3%A0%C3%A8%C3%B2'
         48        SEND_VAR                                                 !0
         49        SEND_VAL                                                 'UTF-8'
         50        DO_FCALL                                      0  $12     
         51        CONCAT                                           ~13     $12, '%0A'
         52        ECHO                                                     ~13
   28    53        INIT_FCALL                                               'str_pad'
         54        SEND_VAL                                                 'BAAZ'
         55        SEND_VAL                                                 10
         56        SEND_VAL                                                 'aeo'
         57        SEND_VAR                                                 !0
         58        DO_ICALL                                         $14     
         59        CONCAT                                           ~15     $14, '%0A'
         60        ECHO                                                     ~15
   29    61        INIT_FCALL                                               'mb_str_pad'
         62        SEND_VAL                                                 'BAAZ'
         63        SEND_VAL                                                 10
         64        SEND_VAL                                                 '%C3%A0%C3%A8%C3%B2'
         65        SEND_VAR                                                 !0
         66        SEND_VAL                                                 'UTF-8'
         67        DO_FCALL                                      0  $16     
         68        CONCAT                                           ~17     $16, '%0A'
         69        ECHO                                                     ~17
   30    70        INIT_FCALL                                               'str_pad'
         71        SEND_VAL                                                 'FOOBAR'
         72        SEND_VAL                                                 6
         73        SEND_VAL                                                 'aeo'
         74        SEND_VAR                                                 !0
         75        DO_ICALL                                         $18     
         76        CONCAT                                           ~19     $18, '%0A'
         77        ECHO                                                     ~19
   31    78        INIT_FCALL                                               'mb_str_pad'
         79        SEND_VAL                                                 'FOOBAR'
         80        SEND_VAL                                                 6
         81        SEND_VAL                                                 '%C3%A0%C3%A8%C3%B2'
         82        SEND_VAR                                                 !0
         83        SEND_VAL                                                 'UTF-8'
         84        DO_FCALL                                      0  $20     
         85        CONCAT                                           ~21     $20, '%0A'
         86        ECHO                                                     ~21
   32    87        INIT_FCALL                                               'str_pad'
         88        SEND_VAL                                                 'FOOBAR'
         89        SEND_VAL                                                 1
         90        SEND_VAL                                                 'aeo'
         91        SEND_VAR                                                 !0
         92        DO_ICALL                                         $22     
         93        CONCAT                                           ~23     $22, '%0A'
         94        ECHO                                                     ~23
   33    95        INIT_FCALL                                               'mb_str_pad'
         96        SEND_VAL                                                 'FOOBAR'
         97        SEND_VAL                                                 1
         98        SEND_VAL                                                 '%C3%A0%C3%A8%C3%B2'
         99        SEND_VAR                                                 !0
        100        SEND_VAL                                                 'UTF-8'
        101        DO_FCALL                                      0  $24     
        102        CONCAT                                           ~25     $24, '%0A'
        103        ECHO                                                     ~25
   34   104        INIT_FCALL                                               'str_pad'
        105        SEND_VAL                                                 'FOOBAR'
        106        SEND_VAL                                                 0
        107        SEND_VAL                                                 'aeo'
        108        SEND_VAR                                                 !0
        109        DO_ICALL                                         $26     
        110        CONCAT                                           ~27     $26, '%0A'
        111        ECHO                                                     ~27
   35   112        INIT_FCALL                                               'mb_str_pad'
        113        SEND_VAL                                                 'FOOBAR'
        114        SEND_VAL                                                 0
        115        SEND_VAL                                                 '%C3%A0%C3%A8%C3%B2'
        116        SEND_VAR                                                 !0
        117        SEND_VAL                                                 'UTF-8'
        118        DO_FCALL                                      0  $28     
        119        CONCAT                                           ~29     $28, '%0A'
        120        ECHO                                                     ~29
   36   121        INIT_FCALL                                               'str_pad'
        122        SEND_VAL                                                 'FOOBAR'
        123        SEND_VAL                                                 -10
        124        SEND_VAL                                                 'aeo'
        125        SEND_VAR                                                 !0
        126        DO_ICALL                                         $30     
        127        CONCAT                                           ~31     $30, '%0A'
        128        ECHO                                                     ~31
   37   129        INIT_FCALL                                               'mb_str_pad'
        130        SEND_VAL                                                 'FOOBAR'
        131        SEND_VAL                                                 -10
        132        SEND_VAL                                                 '%C3%A0%C3%A8%C3%B2'
        133        SEND_VAR                                                 !0
        134        SEND_VAL                                                 'UTF-8'
        135        DO_FCALL                                      0  $32     
        136        CONCAT                                           ~33     $32, '%0A'
        137        ECHO                                                     ~33
   38   138        ECHO                                                     '--%0A'
   20   139      > JMP                                                      ->1
        140    >   FE_FREE                                                  $1
   41   141      > RETURN                                                   1

Function mb_str_pad:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 7, Position 2 = 11
Branch analysis from position: 7
1 jumps found. (Code = 42) Position 1 = 12
Branch analysis from position: 12
2 jumps found. (Code = 47) Position 1 = 15, Position 2 = 17
Branch analysis from position: 15
2 jumps found. (Code = 47) Position 1 = 20, Position 2 = 22
Branch analysis from position: 20
2 jumps found. (Code = 46) Position 1 = 29, Position 2 = 30
Branch analysis from position: 29
2 jumps found. (Code = 43) Position 1 = 31, Position 2 = 34
Branch analysis from position: 31
1 jumps found. (Code = 42) Position 1 = 35
Branch analysis from position: 35
2 jumps found. (Code = 43) Position 1 = 56, Position 2 = 67
Branch analysis from position: 56
1 jumps found. (Code = 42) Position 1 = 68
Branch analysis from position: 68
2 jumps found. (Code = 43) Position 1 = 70, Position 2 = 81
Branch analysis from position: 70
1 jumps found. (Code = 42) Position 1 = 82
Branch analysis from position: 82
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 81
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 67
2 jumps found. (Code = 43) Position 1 = 70, Position 2 = 81
Branch analysis from position: 70
Branch analysis from position: 81
Branch analysis from position: 34
2 jumps found. (Code = 43) Position 1 = 56, Position 2 = 67
Branch analysis from position: 56
Branch analysis from position: 67
Branch analysis from position: 30
Branch analysis from position: 22
Branch analysis from position: 17
Branch analysis from position: 11
2 jumps found. (Code = 47) Position 1 = 15, Position 2 = 17
Branch analysis from position: 15
Branch analysis from position: 17
filename:       /in/UnXTF
function name:  mb_str_pad
number of ops:  87
compiled vars:  !0 = $str, !1 = $pad_len, !2 = $pad_str, !3 = $dir, !4 = $encoding, !5 = $padBefore, !6 = $padAfter, !7 = $targetLen, !8 = $strToRepeatLen, !9 = $repeatTimes, !10 = $repeatedString, !11 = $before, !12 = $after
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        RECV_INIT                                        !2      '+'
          3        RECV_INIT                                        !3      <const ast>
          4        RECV_INIT                                        !4      null
    5     5        TYPE_CHECK                                    2          !4
          6      > JMPZ                                                     ~13, ->11
          7    >   INIT_FCALL                                               'mb_internal_encoding'
          8        DO_ICALL                                         $14     
          9        QM_ASSIGN                                        ~15     $14
         10      > JMP                                                      ->12
         11    >   QM_ASSIGN                                        ~15     !4
         12    >   ASSIGN                                                   !4, ~15
    6    13        IS_IDENTICAL                                     ~17     !3, 2
         14      > JMPNZ_EX                                         ~17     ~17, ->17
         15    >   IS_IDENTICAL                                     ~18     !3, 0
         16        BOOL                                             ~17     ~18
         17    >   ASSIGN                                                   !5, ~17
    7    18        IS_IDENTICAL                                     ~20     !3, 2
         19      > JMPNZ_EX                                         ~20     ~20, ->22
         20    >   IS_IDENTICAL                                     ~21     !3, 1
         21        BOOL                                             ~20     ~21
         22    >   ASSIGN                                                   !6, ~20
    8    23        INIT_FCALL                                               'mb_strlen'
         24        SEND_VAR                                                 !0
         25        SEND_VAR                                                 !4
         26        DO_ICALL                                         $23     
         27        ASSIGN_OP                                     2          !1, $23
    9    28      > JMPZ_EX                                          ~25     !5, ->30
         29    >   BOOL                                             ~25     !6
         30    > > JMPZ                                                     ~25, ->34
         31    >   DIV                                              ~26     !1, 2
         32        QM_ASSIGN                                        ~27     ~26
         33      > JMP                                                      ->35
         34    >   QM_ASSIGN                                        ~27     !1
         35    >   ASSIGN                                                   !7, ~27
   10    36        INIT_FCALL                                               'mb_strlen'
         37        SEND_VAR                                                 !2
         38        SEND_VAR                                                 !4
         39        DO_ICALL                                         $29     
         40        ASSIGN                                                   !8, $29
   11    41        INIT_FCALL                                               'ceil'
         42        DIV                                              ~31     !7, !8
         43        SEND_VAL                                                 ~31
         44        DO_ICALL                                         $32     
         45        ASSIGN                                                   !9, $32
   12    46        INIT_FCALL                                               'str_repeat'
         47        SEND_VAR                                                 !2
         48        INIT_FCALL                                               'max'
         49        SEND_VAL                                                 0
         50        SEND_VAR                                                 !9
         51        DO_ICALL                                         $34     
         52        SEND_VAR                                                 $34
         53        DO_ICALL                                         $35     
         54        ASSIGN                                                   !10, $35
   13    55      > JMPZ                                                     !5, ->67
         56    >   INIT_FCALL                                               'mb_substr'
         57        SEND_VAR                                                 !10
         58        SEND_VAL                                                 0
         59        INIT_FCALL                                               'floor'
         60        SEND_VAR                                                 !7
         61        DO_ICALL                                         $37     
         62        SEND_VAR                                                 $37
         63        SEND_VAR                                                 !4
         64        DO_ICALL                                         $38     
         65        QM_ASSIGN                                        ~39     $38
         66      > JMP                                                      ->68
         67    >   QM_ASSIGN                                        ~39     ''
         68    >   ASSIGN                                                   !11, ~39
   14    69      > JMPZ                                                     !6, ->81
         70    >   INIT_FCALL                                               'mb_substr'
         71        SEND_VAR                                                 !10
         72        SEND_VAL                                                 0
         73        INIT_FCALL                                               'ceil'
         74        SEND_VAR                                                 !7
         75        DO_ICALL                                         $41     
         76        SEND_VAR                                                 $41
         77        SEND_VAR                                                 !4
         78        DO_ICALL                                         $42     
         79        QM_ASSIGN                                        ~43     $42
         80      > JMP                                                      ->82
         81    >   QM_ASSIGN                                        ~43     ''
         82    >   ASSIGN                                                   !12, ~43
   15    83        CONCAT                                           ~45     !11, !0
         84        CONCAT                                           ~46     ~45, !12
         85      > RETURN                                                   ~46
   16    86*     > RETURN                                                   null

End of function mb_str_pad

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
177.39 ms | 1416 KiB | 31 Q