$w) { $offset += $w*10000; if ($r <= $offset) { return $k; } } } $weights = array("one" => 0.09, "two" => 0.11, "pie" => 0.05, "fish" => 0.15, "dog" => 0.30, "oink" => 0.25, "foo" => 0.05); $r = array(); $size = 2000000; start_timer(); while ($i++ < $size) { $r[w_rand($weights)]++; } stop_timer(); echo number_format(get_timer()/$size * 1000,6) . " ms avg. runtime\n\n"; $s = array_sum($r); echo "key\tpct\t% err\n"; echo "---\t---\t-----\n"; foreach ($weights as $k => $w) { $v = $r[$k]; $t = $v/$s * 100; $d = number_format(abs($t - $w*100)/($w),2); $t = number_format($t,2); echo "{$k}\t$t\t$d%\n"; } ?>