3v4l.org

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

End of function test

Function is_associative_array:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/SZDsQ
function name:  is_associative_array
number of ops:  2
compiled vars:  !0 = $array
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   16     0  E >   RECV                                             !0      
   19     1      > RETURN                                                   null

End of function is_associative_array

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
174.57 ms | 964 KiB | 42 Q