Рандом с вероятностью у элементов?
Вариантов решения море. Зависит от Вашей фантазии.
Я бы сделал так:
1. Посчитать текущий шанс выпадения, как-нибудь так mt_rand(0, 10000) / 100.
2. Отфильтровать массив для удаления элементов с шансом ниже чем у шага 1.
3. Выполнить например array_shuffle.
4. Выбрать нужное количество элементов.
Если же шанс нужен для каждого элемента считать отдельно, то соответственно это происходит во время фильтрации. Благо имеется фильтрация с колбеком: php.net/manual/ru/function.array-filter.php
$els = array(
	array('id'=> 1,'chance' => 10),
	array('id'=> 2,'chance' => 15),
	array('id'=> 3,'chance' => 1),
	array('id'=> 4,'chance' => 20),
	array('id'=> 5,'chance' => 50),
);

function getItem($data) {
	$randArray = array();

	foreach ($data as $value) {
		for ($i = 0; $i < $value['chance']; $i++) { 
			$randArray[] = $value['id'];
		}
	}

	return $randArray[mt_rand(0, count($randArray) - 1)];
}
Сделал так