3v4l.org

run code in 300+ PHP versions simultaneously
<?php function test($array) { try { return is_indexed_array($array); } catch (Exception $e) { echo $e->getMessage(); return 'error'; } } function is_indexed_array( &$array ) { if ( !is_array($array) || empty($array) ) { return -1; } $next = 0; foreach ( $array as $k => $v ) { if ( $k !== $next ) return false; $next++; } return true; } ////non-arrays //assert(test(null)); //assert(test('')); //assert(test(0)); //assert(test(false)); //assert(test(new stdClass)); assert(test([]) === true); // empty array assert(test([null, 1, 2]) === true); // random test assert(test(['' => '']) === false); // random test assert(test([0 => '']) === true); // random test assert(test([1 => 'a']) === false); // random test // numeric keys assert(test(['', 'a', 'b']) === true); // proper indexed array 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 // string keys assert(test(['' => '', 'a' => 'a', 'b' => 'b']) === false); // proper dictionary // mixed keys assert(test(['' => '', 1 => 'a', 2 => 'b']) === false); // first key string but rest not; also, associative even though '' == 0 assert(test([0 => '', 1 => 'a', 'b' => 'b']) === false); // first key numeric but rest not // numeric string keys 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

preferences:
42.15 ms | 402 KiB | 5 Q