3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * Return an elipsis given a string and a number of words */ function elipsis ($text, $words = 30) { // Check if string has more than X words if (str_word_count($text) > $words) { // Extract first X words from string preg_match("/(?:[^\s,\.;\?\!]+(?:[\s,\.;\?\!]+|$)){0,$words}/", $text, $matches); $text = trim($matches[0]); // Let's check if it ends in a comma or a dot. if (substr($text, -1) == ',') { // If it's a comma, let's remove it and add a ellipsis $text = rtrim($text, ','); $text .= '...'; } else if (substr($text, -1) == '.') { // If it's a dot, let's remove it and add a ellipsis (optional) $text = rtrim($text, '.'); $text .= '...'; } else { // Doesn't end in dot or comma, just adding ellipsis here $text .= '...'; } } // Returns "ellipsed" text, or just the string, if it's less than X words wide. return $text; } $description = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quibusdam ut placeat consequuntur pariatur iure eum ducimus quasi perferendis, laborum obcaecati iusto ullam expedita excepturi debitis nisi deserunt fugiat velit assumenda. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Incidunt, blanditiis nostrum. Nostrum cumque non rerum ducimus voluptas officia tempore modi, nulla nisi illum, voluptates dolor sapiente ut iusto earum. Esse? Lorem ipsum dolor sit amet, consectetur adipisicing elit. A eligendi perspiciatis natus autem. Necessitatibus eligendi doloribus corporis quia, quas laboriosam. Beatae repellat dolor alias. Perferendis, distinctio, laudantium? Dolorum, veniam, amet!'; echo elipsis($description, 30);
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/dFqlg
function name:  (null)
number of ops:  7
compiled vars:  !0 = $description
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   32     0  E >   ASSIGN                                                   !0, 'Lorem+ipsum+dolor+sit+amet%2C+consectetur+adipisicing+elit.+Quibusdam+ut+placeat+consequuntur+pariatur+iure+eum+ducimus+quasi+perferendis%2C+laborum+obcaecati+iusto+ullam+expedita+excepturi+debitis+nisi+deserunt+fugiat+velit+assumenda.+Lorem+ipsum+dolor+sit+amet%2C+consectetur+adipisicing+elit.+Incidunt%2C+blanditiis+nostrum.+Nostrum+cumque+non+rerum+ducimus+voluptas+officia+tempore+modi%2C+nulla+nisi+illum%2C+voluptates+dolor+sapiente+ut+iusto+earum.+Esse%3F+Lorem+ipsum+dolor+sit+amet%2C+consectetur+adipisicing+elit.+A+eligendi+perspiciatis+natus+autem.+Necessitatibus+eligendi+doloribus+corporis+quia%2C+quas+laboriosam.+Beatae+repellat+dolor+alias.+Perferendis%2C+distinctio%2C+laudantium%3F+Dolorum%2C+veniam%2C+amet%21'
   34     1        INIT_FCALL                                               'elipsis'
          2        SEND_VAR                                                 !0
          3        SEND_VAL                                                 30
          4        DO_FCALL                                      0  $2      
          5        ECHO                                                     $2
          6      > RETURN                                                   1

Function elipsis:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 7, Position 2 = 47
Branch analysis from position: 7
2 jumps found. (Code = 43) Position 1 = 26, Position 2 = 33
Branch analysis from position: 26
1 jumps found. (Code = 42) Position 1 = 47
Branch analysis from position: 47
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 33
2 jumps found. (Code = 43) Position 1 = 39, Position 2 = 46
Branch analysis from position: 39
1 jumps found. (Code = 42) Position 1 = 47
Branch analysis from position: 47
Branch analysis from position: 46
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 47
filename:       /in/dFqlg
function name:  elipsis
number of ops:  49
compiled vars:  !0 = $text, !1 = $words, !2 = $matches
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    6     0  E >   RECV                                             !0      
          1        RECV_INIT                                        !1      30
    8     2        INIT_FCALL                                               'str_word_count'
          3        SEND_VAR                                                 !0
          4        DO_ICALL                                         $3      
          5        IS_SMALLER                                               !1, $3
          6      > JMPZ                                                     ~4, ->47
   11     7    >   INIT_FCALL                                               'preg_match'
          8        ROPE_INIT                                     3  ~6      '%2F%28%3F%3A%5B%5E%5Cs%2C%5C.%3B%5C%3F%5C%21%5D%2B%28%3F%3A%5B%5Cs%2C%5C.%3B%5C%3F%5C%21%5D%2B%7C%24%29%29%7B0%2C'
          9        ROPE_ADD                                      1  ~6      ~6, !1
         10        ROPE_END                                      2  ~5      ~6, '%7D%2F'
         11        SEND_VAL                                                 ~5
         12        SEND_VAR                                                 !0
         13        SEND_REF                                                 !2
         14        DO_ICALL                                                 
   12    15        INIT_FCALL                                               'trim'
         16        FETCH_DIM_R                                      ~9      !2, 0
         17        SEND_VAL                                                 ~9
         18        DO_ICALL                                         $10     
         19        ASSIGN                                                   !0, $10
   15    20        INIT_FCALL                                               'substr'
         21        SEND_VAR                                                 !0
         22        SEND_VAL                                                 -1
         23        DO_ICALL                                         $12     
         24        IS_EQUAL                                                 $12, '%2C'
         25      > JMPZ                                                     ~13, ->33
   17    26    >   INIT_FCALL                                               'rtrim'
         27        SEND_VAR                                                 !0
         28        SEND_VAL                                                 '%2C'
         29        DO_ICALL                                         $14     
         30        ASSIGN                                                   !0, $14
   18    31        ASSIGN_OP                                     8          !0, '...'
   15    32      > JMP                                                      ->47
   19    33    >   INIT_FCALL                                               'substr'
         34        SEND_VAR                                                 !0
         35        SEND_VAL                                                 -1
         36        DO_ICALL                                         $17     
         37        IS_EQUAL                                                 $17, '.'
         38      > JMPZ                                                     ~18, ->46
   21    39    >   INIT_FCALL                                               'rtrim'
         40        SEND_VAR                                                 !0
         41        SEND_VAL                                                 '.'
         42        DO_ICALL                                         $19     
         43        ASSIGN                                                   !0, $19
   22    44        ASSIGN_OP                                     8          !0, '...'
   19    45      > JMP                                                      ->47
   25    46    >   ASSIGN_OP                                     8          !0, '...'
   29    47    > > RETURN                                                   !0
   30    48*     > RETURN                                                   null

End of function elipsis

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
156.45 ms | 1022 KiB | 19 Q