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 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

- Создание сайтов на 1С-Битрикс любой сложности
- Вёрстка макетов Figma, Photoshop, Zeplin
- Поддержка проектов на Битриксе
- Разработка нового функционала для сайта
- Парсинг данных
- Выгрузка из файлов в формате XML, YML, XLS, XLSX, CSV, JSON
- Интеграция по API со сторонними сервисами
и многое другое

E-mail: dmitriyribka@gmail.com

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *