3v4l.org

run code in 300+ PHP versions simultaneously
<?php /* Při číselných indexech je první kolize hashe v případě intervalu 1000 se vyhledává v položkách pole, kde kolize klíčů není. Zvětšíme-li hodnotu intervalu (např zmiňovaných 2000000, začneme vyhledávat i v klíčích s kolizí. */ define('INTERVAL', 1000); /* DJBX33A Hash function implemented in PHP */ function DJBX33A($key) { $hash = 5381; if (is_int($key)) { $key = pack("I*", $key); } for ($i = 0, $c = strlen($key); $i < $c; $i++) { $hash = (($hash << 5) + $hash) + ord($key[$i]); } return $hash; } $col = []; $f = false; $arr = []; for ($i = 0; $i < 2000000; $i++) { $arr[$i] = ['a' => 1+1]; $col[DJBX33A($i)] += 1; if(!$f && $col[DJBX33A($i)] > 1) { var_dump(array($i, DJBX33A($i))); $f = true; die(); } //if($i < INTERVAL) $deb[DJBX33A($i)] = $col[DJBX33A($i)]; } $start = microtime(true); for ($i = 0; $i < 1000000; $i++) { $arr[mt_rand(0, INTERVAL-1)]; } $time = microtime(true) - $start; $deb = $col; var_dump(count($deb)); arsort($deb); var_dump(array_slice($deb, 0, 15, true)); var_dump($time);

preferences:
32.97 ms | 402 KiB | 5 Q