3v4l.org

run code in 300+ PHP versions simultaneously
<?php function test($array) { try { $array = (object)$array; return is_indexed_array($array); } catch (Exception $e) { echo $e->getMessage(); return 'error'; } } assert(test([]) === true); assert(test(['', 'a', 'b']) === true); // proper indexed array; also, to catch wrong isset usage assert(test([1 => 'a', 2 => 'b', 3 => 'c']) === false); // sequential but not 0-based assert(test([-1 => '', 0 => '', 1 => 'a']) === false); // sequential but not 0-based assert(test([0 => '', 2 => 'b', 3 => 'c']) === false); // 1 index missing assert(test([0 => '', 2 => 'b', 1 => 'a']) === false); // numeric but unordered assert(test([0 => '']) === true); // single item assert(test([1 => 'a']) === false); // single item assert(test([NAN]) === true); assert(test([NAN => '']) === false); assert(test([INF]) === true); assert(test([INF => '']) === false); assert(test([' ' => '', 'a' => 'a', 'b' => 'b']) === false); // proper associative array assert(test([' ' => '']) === false); // single item; also, associative even though '' == 0 assert(test([' ' => '', 1 => 'a']) === false); // first key string but rest not assert(test([' ' => '', 0 => '']) === false); // first key string but rest not assert(test([0 => '', 'a' => 'a']) === false); // first key numeric but rest not assert(test([' 0' => '']) === false); // associative even though ' 0' == 0 assert(test(['00' => '']) === false); // associative even though '00' == 0 assert(test(['0*' => '']) === false); // associative even though '0*' == 0 assert(test(['0.0' => '']) === false); // associative even though '0.0' == 0.0 assert(test(['0x0' => '']) === false); // associative even though '0x0' == 0 assert(test(['0e0' => '']) === false); // associative even though '0e0' == 0 assert(test(['-0' => '']) === false); // associative even though '0e0' == 0 $obj = new stdClass; $obj->{0} = ''; assert(test((array)$obj) === false); // to catch ['0' => ''] like situations function is_indexed_array($array) { foreach (array_keys($array) as $k => $v) if ($k !== $v) return false; return true; }
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/f7Ma0
function name:  (null)
number of ops:  232
compiled vars:  !0 = $obj
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   19     0  E >   ASSERT_CHECK                                             
          1        INIT_FCALL                                               'assert'
          2        INIT_FCALL                                               'test'
          3        SEND_VAL                                                 <array>
          4        DO_FCALL                                      0  $1      
          5        TYPE_CHECK                                    8  ~2      $1
          6        SEND_VAL                                                 ~2
          7        SEND_VAL                                                 'assert%28test%28%5B%5D%29+%3D%3D%3D+true%29'
          8        DO_ICALL                                                 
   20     9        ASSERT_CHECK                                             
         10        INIT_FCALL                                               'assert'
         11        INIT_FCALL                                               'test'
         12        SEND_VAL                                                 <array>
         13        DO_FCALL                                      0  $4      
         14        TYPE_CHECK                                    8  ~5      $4
         15        SEND_VAL                                                 ~5
         16        SEND_VAL                                                 'assert%28test%28%5B%27%27%2C+%27a%27%2C+%27b%27%5D%29+%3D%3D%3D+true%29'
         17        DO_ICALL                                                 
   21    18        ASSERT_CHECK                                             
         19        INIT_FCALL                                               'assert'
         20        INIT_FCALL                                               'test'
         21        SEND_VAL                                                 <array>
         22        DO_FCALL                                      0  $7      
         23        TYPE_CHECK                                    4  ~8      $7
         24        SEND_VAL                                                 ~8
         25        SEND_VAL                                                 'assert%28test%28%5B1+%3D%3E+%27a%27%2C+2+%3D%3E+%27b%27%2C+3+%3D%3E+%27c%27%5D%29+%3D%3D%3D+false%29'
         26        DO_ICALL                                                 
   22    27        ASSERT_CHECK                                             
         28        INIT_FCALL                                               'assert'
         29        INIT_FCALL                                               'test'
         30        SEND_VAL                                                 <array>
         31        DO_FCALL                                      0  $10     
         32        TYPE_CHECK                                    4  ~11     $10
         33        SEND_VAL                                                 ~11
         34        SEND_VAL                                                 'assert%28test%28%5B-1+%3D%3E+%27%27%2C+0+%3D%3E+%27%27%2C+1+%3D%3E+%27a%27%5D%29+%3D%3D%3D+false%29'
         35        DO_ICALL                                                 
   23    36        ASSERT_CHECK                                             
         37        INIT_FCALL                                               'assert'
         38        INIT_FCALL                                               'test'
         39        SEND_VAL                                                 <array>
         40        DO_FCALL                                      0  $13     
         41        TYPE_CHECK                                    4  ~14     $13
         42        SEND_VAL                                                 ~14
         43        SEND_VAL                                                 'assert%28test%28%5B0+%3D%3E+%27%27%2C+2+%3D%3E+%27b%27%2C+3+%3D%3E+%27c%27%5D%29+%3D%3D%3D+false%29'
         44        DO_ICALL                                                 
   24    45        ASSERT_CHECK                                             
         46        INIT_FCALL                                               'assert'
         47        INIT_FCALL                                               'test'
         48        SEND_VAL                                                 <array>
         49        DO_FCALL                                      0  $16     
         50        TYPE_CHECK                                    4  ~17     $16
         51        SEND_VAL                                                 ~17
         52        SEND_VAL                                                 'assert%28test%28%5B0+%3D%3E+%27%27%2C+2+%3D%3E+%27b%27%2C+1+%3D%3E+%27a%27%5D%29+%3D%3D%3D+false%29'
         53        DO_ICALL                                                 
   25    54        ASSERT_CHECK                                             
         55        INIT_FCALL                                               'assert'
         56        INIT_FCALL                                               'test'
         57        SEND_VAL                                                 <array>
         58        DO_FCALL                                      0  $19     
         59        TYPE_CHECK                                    8  ~20     $19
         60        SEND_VAL                                                 ~20
         61        SEND_VAL                                                 'assert%28test%28%5B0+%3D%3E+%27%27%5D%29+%3D%3D%3D+true%29'
         62        DO_ICALL                                                 
   26    63        ASSERT_CHECK                                             
         64        INIT_FCALL                                               'assert'
         65        INIT_FCALL                                               'test'
         66        SEND_VAL                                                 <array>
         67        DO_FCALL                                      0  $22     
         68        TYPE_CHECK                                    4  ~23     $22
         69        SEND_VAL                                                 ~23
         70        SEND_VAL                                                 'assert%28test%28%5B1+%3D%3E+%27a%27%5D%29+%3D%3D%3D+false%29'
         71        DO_ICALL                                                 
   27    72        ASSERT_CHECK                                             
         73        INIT_FCALL                                               'assert'
         74        INIT_FCALL                                               'test'
         75        SEND_VAL                                                 <array>
         76        DO_FCALL                                      0  $25     
         77        TYPE_CHECK                                    8  ~26     $25
         78        SEND_VAL                                                 ~26
         79        SEND_VAL                                                 'assert%28test%28%5BNAN%5D%29+%3D%3D%3D+true%29'
         80        DO_ICALL                                                 
   28    81        ASSERT_CHECK                                             
         82        INIT_FCALL                                               'assert'
         83        INIT_FCALL                                               'test'
         84        SEND_VAL                                                 <array>
         85        DO_FCALL                                      0  $28     
         86        TYPE_CHECK                                    4  ~29     $28
         87        SEND_VAL                                                 ~29
         88        SEND_VAL                                                 'assert%28test%28%5BNAN+%3D%3E+%27%27%5D%29+%3D%3D%3D+false%29'
         89        DO_ICALL                                                 
   29    90        ASSERT_CHECK                                             
         91        INIT_FCALL                                               'assert'
         92        INIT_FCALL                                               'test'
         93        SEND_VAL                                                 <array>
         94        DO_FCALL                                      0  $31     
         95        TYPE_CHECK                                    8  ~32     $31
         96        SEND_VAL                                                 ~32
         97        SEND_VAL                                                 'assert%28test%28%5BINF%5D%29+%3D%3D%3D+true%29'
         98        DO_ICALL                                                 
   30    99        ASSERT_CHECK                                             
        100        INIT_FCALL                                               'assert'
        101        INIT_FCALL                                               'test'
        102        SEND_VAL                                                 <array>
        103        DO_FCALL                                      0  $34     
        104        TYPE_CHECK                                    4  ~35     $34
        105        SEND_VAL                                                 ~35
        106        SEND_VAL                                                 'assert%28test%28%5BINF+%3D%3E+%27%27%5D%29+%3D%3D%3D+false%29'
        107        DO_ICALL                                                 
   31   108        ASSERT_CHECK                                             
        109        INIT_FCALL                                               'assert'
        110        INIT_FCALL                                               'test'
        111        SEND_VAL                                                 <array>
        112        DO_FCALL                                      0  $37     
        113        TYPE_CHECK                                    4  ~38     $37
        114        SEND_VAL                                                 ~38
        115        SEND_VAL                                                 'assert%28test%28%5B%27+%27+%3D%3E+%27%27%2C+%27a%27+%3D%3E+%27a%27%2C+%27b%27+%3D%3E+%27b%27%5D%29+%3D%3D%3D+false%29'
        116        DO_ICALL                                                 
   32   117        ASSERT_CHECK                                             
        118        INIT_FCALL                                               'assert'
        119        INIT_FCALL                                               'test'
        120        SEND_VAL                                                 <array>
        121        DO_FCALL                                      0  $40     
        122        TYPE_CHECK                                    4  ~41     $40
        123        SEND_VAL                                                 ~41
        124        SEND_VAL                                                 'assert%28test%28%5B%27+%27+%3D%3E+%27%27%5D%29+%3D%3D%3D+false%29'
        125        DO_ICALL                                                 
   33   126        ASSERT_CHECK                                             
        127        INIT_FCALL                                               'assert'
        128        INIT_FCALL                                               'test'
        129        SEND_VAL                                                 <array>
        130        DO_FCALL                                      0  $43     
        131        TYPE_CHECK                                    4  ~44     $43
        132        SEND_VAL                                                 ~44
        133        SEND_VAL                                                 'assert%28test%28%5B%27+%27+%3D%3E+%27%27%2C+1+%3D%3E+%27a%27%5D%29+%3D%3D%3D+false%29'
        134        DO_ICALL                                                 
   34   135        ASSERT_CHECK                                             
        136        INIT_FCALL                                               'assert'
        137        INIT_FCALL                                               'test'
        138        SEND_VAL                                                 <array>
        139        DO_FCALL                                      0  $46     
        140        TYPE_CHECK                                    4  ~47     $46
        141        SEND_VAL                                                 ~47
        142        SEND_VAL                                                 'assert%28test%28%5B%27+%27+%3D%3E+%27%27%2C+0+%3D%3E+%27%27%5D%29+%3D%3D%3D+false%29'
        143        DO_ICALL                                                 
   35   144        ASSERT_CHECK                                             
        145        INIT_FCALL                                               'assert'
        146        INIT_FCALL                                               'test'
        147        SEND_VAL                                                 <array>
        148        DO_FCALL                                      0  $49     
        149        TYPE_CHECK                                    4  ~50     $49
        150        SEND_VAL                                                 ~50
        151        SEND_VAL                                                 'assert%28test%28%5B0+%3D%3E+%27%27%2C+%27a%27+%3D%3E+%27a%27%5D%29+%3D%3D%3D+false%29'
        152        DO_ICALL                                                 
   36   153        ASSERT_CHECK                                             
        154        INIT_FCALL                                               'assert'
        155        INIT_FCALL                                               'test'
        156        SEND_VAL                                                 <array>
        157        DO_FCALL                                      0  $52     
        158        TYPE_CHECK                                    4  ~53     $52
        159        SEND_VAL                                                 ~53
        160        SEND_VAL                                                 'assert%28test%28%5B%27+0%27+%3D%3E+%27%27%5D%29+%3D%3D%3D+false%29'
        161        DO_ICALL                                                 
   37   162        ASSERT_CHECK                                             
        163        INIT_FCALL                                               'assert'
        164        INIT_FCALL                                               'test'
        165        SEND_VAL                                                 <array>
        166        DO_FCALL                                      0  $55     
        167        TYPE_CHECK                                    4  ~56     $55
        168        SEND_VAL                                                 ~56
        169        SEND_VAL                                                 'assert%28test%28%5B%2700%27+%3D%3E+%27%27%5D%29+%3D%3D%3D+false%29'
        170        DO_ICALL                                                 
   38   171        ASSERT_CHECK                                             
        172        INIT_FCALL                                               'assert'
        173        INIT_FCALL                                               'test'
        174        SEND_VAL                                                 <array>
        175        DO_FCALL                                      0  $58     
        176        TYPE_CHECK                                    4  ~59     $58
        177        SEND_VAL                                                 ~59
        178        SEND_VAL                                                 'assert%28test%28%5B%270%2A%27+%3D%3E+%27%27%5D%29+%3D%3D%3D+false%29'
        179        DO_ICALL                                                 
   39   180        ASSERT_CHECK                                             
        181        INIT_FCALL                                               'assert'
        182        INIT_FCALL                                               'test'
        183        SEND_VAL                                                 <array>
        184        DO_FCALL                                      0  $61     
        185        TYPE_CHECK                                    4  ~62     $61
        186        SEND_VAL                                                 ~62
        187        SEND_VAL                                                 'assert%28test%28%5B%270.0%27+%3D%3E+%27%27%5D%29+%3D%3D%3D+false%29'
        188        DO_ICALL                                                 
   40   189        ASSERT_CHECK                                             
        190        INIT_FCALL                                               'assert'
        191        INIT_FCALL                                               'test'
        192        SEND_VAL                                                 <array>
        193        DO_FCALL                                      0  $64     
        194        TYPE_CHECK                                    4  ~65     $64
        195        SEND_VAL                                                 ~65
        196        SEND_VAL                                                 'assert%28test%28%5B%270x0%27+%3D%3E+%27%27%5D%29+%3D%3D%3D+false%29'
        197        DO_ICALL                                                 
   41   198        ASSERT_CHECK                                             
        199        INIT_FCALL                                               'assert'
        200        INIT_FCALL                                               'test'
        201        SEND_VAL                                                 <array>
        202        DO_FCALL                                      0  $67     
        203        TYPE_CHECK                                    4  ~68     $67
        204        SEND_VAL                                                 ~68
        205        SEND_VAL                                                 'assert%28test%28%5B%270e0%27+%3D%3E+%27%27%5D%29+%3D%3D%3D+false%29'
        206        DO_ICALL                                                 
   42   207        ASSERT_CHECK                                             
        208        INIT_FCALL                                               'assert'
        209        INIT_FCALL                                               'test'
        210        SEND_VAL                                                 <array>
        211        DO_FCALL                                      0  $70     
        212        TYPE_CHECK                                    4  ~71     $70
        213        SEND_VAL                                                 ~71
        214        SEND_VAL                                                 'assert%28test%28%5B%27-0%27+%3D%3E+%27%27%5D%29+%3D%3D%3D+false%29'
        215        DO_ICALL                                                 
   43   216        NEW                                              $73     'stdClass'
        217        DO_FCALL                                      0          
        218        ASSIGN                                                   !0, $73
        219        ASSIGN_OBJ                                               !0, '0'
        220        OP_DATA                                                  ''
        221        ASSERT_CHECK                                             
        222        INIT_FCALL                                               'assert'
        223        INIT_FCALL                                               'test'
        224        CAST                                          7  ~77     !0
        225        SEND_VAL                                                 ~77
        226        DO_FCALL                                      0  $78     
        227        TYPE_CHECK                                    4  ~79     $78
        228        SEND_VAL                                                 ~79
        229        SEND_VAL                                                 'assert%28test%28%28array%29%24obj%29+%3D%3D%3D+false%29'
        230        DO_ICALL                                                 
   54   231      > RETURN                                                   1

Function test:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
Found catch point at position: 8
Branch analysis from position: 8
2 jumps found. (Code = 107) Position 1 = 9, Position 2 = -2
Branch analysis from position: 9
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/f7Ma0
function name:  test
number of ops:  14
compiled vars:  !0 = $array, !1 = $e
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   RECV                                             !0      
    7     1        CAST                                          8  ~2      !0
          2        ASSIGN                                                   !0, ~2
    8     3        INIT_FCALL_BY_NAME                                       'is_indexed_array'
          4        SEND_VAR_EX                                              !0
          5        DO_FCALL                                      0  $4      
          6      > RETURN                                                   $4
          7*       JMP                                                      ->13
   10     8  E > > CATCH                                       last         'Exception'
   12     9    >   INIT_METHOD_CALL                                         !1, 'getMessage'
         10        DO_FCALL                                      0  $5      
         11        ECHO                                                     $5
   13    12      > RETURN                                                   'error'
   15    13*     > RETURN                                                   null

End of function test

Function is_indexed_array:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 5, Position 2 = 12
Branch analysis from position: 5
2 jumps found. (Code = 78) Position 1 = 6, Position 2 = 12
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 = 62) Position 1 = -2
Branch analysis from position: 11
1 jumps found. (Code = 42) Position 1 = 5
Branch analysis from position: 5
Branch analysis from position: 12
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 12
filename:       /in/f7Ma0
function name:  is_indexed_array
number of ops:  15
compiled vars:  !0 = $array, !1 = $v, !2 = $k
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   47     0  E >   RECV                                             !0      
   49     1        INIT_FCALL                                               'array_keys'
          2        SEND_VAR                                                 !0
          3        DO_ICALL                                         $3      
          4      > FE_RESET_R                                       $4      $3, ->12
          5    > > FE_FETCH_R                                       ~5      $4, !1, ->12
          6    >   ASSIGN                                                   !2, ~5
   50     7        IS_NOT_IDENTICAL                                         !2, !1
          8      > JMPZ                                                     ~7, ->11
   51     9    >   FE_FREE                                                  $4
         10      > RETURN                                                   <false>
   49    11    > > JMP                                                      ->5
         12    >   FE_FREE                                                  $4
   53    13      > RETURN                                                   <true>
   54    14*     > RETURN                                                   null

End of function is_indexed_array

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
164.92 ms | 1414 KiB | 42 Q