Рандом из массива с указанной вероятностью, PHP

$a = [
     'a' => 1,
     'b' => 0.11,
     'c' => 0.5,
     'd' => 1,
     'e' => 0.02,
     'f' => 0.0000005,
// ...
];

Мне нужно сделать такой рандом, который чаще всего будет возращать тот ключ, у которого больший вес.

Приводим коэффициенты к целым числам пропорционально так, чтобы минимальный коэффициент равнялся единице, остальные округляем до единиц. Таким образом получаем на выходе массив с целыми числами, где отношения в пропорции элементов друг к другу будут близкими к изначальным. Далее на основе этого промежуточного массива генерируем новый, с диапазонами, для первого элемента от 0 до его значения, для каждого последующего от суммы всех предыдущих значений до сумма текущее значение. Таким образом весь массив диапазонами покрывает значения от 0 до суммы всех величин из первого промежуточного массива, которую обозначим как S. Далее используем только второй массив с диапазонами, для каждого элемента выборки генерим рандомное число R от 0 до S, и находим ключ согласно тому диапазону, куда в каждой итерации попадает R.