function weightedRandom($weights, $default_key = '')
{
if (empty($weights)) {
throw new \InvalidArgumentException("Incoming array is empty");
}
$r = mt_rand(1, array_sum($weights));
foreach ($weights as $key => $weight) {
$r -= $weight;
if ($r <= 0) {
return $key;
}
}
return $default_key;
}