Делаем логику выпадения призов как в лотерее.
Как написать функцию выпадения призов, с учетом процентов на PHP?
Первым делом заполним наш массив:
$arPrize = [ 0 => [ "id" => 1, "name" => 'имя', "weight" => 30, ], 1 => [ "id" => 2, "name" => 'имя 2', "weight" => 20, ], 2 => [ "id" => 3, "name" => 'имя 3', "weight" => 50, ], ];
weight – вес, по которому мы и будем искать приз, по сути он соответствует процентному шансу на выпадение. Теперь пишем саму функцию:
function randByWeight(array $arr) { $max = 0; $result = []; foreach($arr as $value) { $rand = pow((mt_rand() / (mt_getrandmax() + 1)), 1/$value['weight']); if ($rand > $max) { $max = $rand; $result = $value; } } return $result; }
В качестве аргумента функция принимает массив, а возвращает один из элементов. Обратите внимание что вернется полностью весь массив с данными, что удобно как по мне :). Как использовать данную функцию?
$prize = randByWeight($arPrize);
Вот так на PHP можно реализовать вывод рандомного элемента из массива с учетом процентов (веса). Данный код можно применять в различных розыгрышах и лотереях, в показе определенных баннеров и информации, различных изображений и т.д.
Спасибо! работает