Прежде всего, ваша система просто ... тупая . Он увековечивает баннеры с большим количеством просмотров, в то время как вновь созданные баннеры с 0 или несколькими просмотрами никогда не получат шанс быть выбранным, и, таким образом, никогда не будет фактически видно ...
При этом, если у вас есть массив, который выглядит следующим образом:
$banners = array
(
'banner1' => 1,
'banner2' => 2,
'banner3' => 4,
'banner4' => 8,
'banner5' => 16,
);
Вы можете использовать такую функцию, чтобы взвешенно выбрать один баннер:
function Probability($data)
{
if (is_array($data) === true) {
$result = 0;
$probability = mt_rand(1, array_sum($data));
foreach ($data as $key => $value) {
$result += $value;
if ($result >= $probability) {
return $key;
}
}
}
return false;
}
Использование (проверить @ CodePad.org или @ IDEOne ):
echo Probability($banners); // banner5
Образец из 100 казней:
Array
(
[banner5] => 41
[banner4] => 38
[banner3] => 10
[banner2] => 8
[banner1] => 3
)