PHP – функция рандома по процентам

Делаем логику выпадения призов как в лотерее.

Как написать функцию выпадения призов, с учетом процентов на 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 можно реализовать вывод рандомного элемента из массива с учетом процентов (веса). Данный код можно применять в различных розыгрышах и лотереях, в показе определенных баннеров и информации, различных изображений и т.д.

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Один коментар

Залишити коментар до Николай Скасувати коментар