$a = [
'a' => 1,
'b' => 0.11,
'c' => 0.5,
'd' => 1,
'e' => 0.02,
'f' => 0.0000005,
// ...
];
Мне нужно сделать такой рандом, который чаще всего будет возращать тот ключ, у которого больший вес.
$a = [
'a' => 1,
'b' => 0.11,
'c' => 0.5,
'd' => 1,
'e' => 0.02,
'f' => 0.0000005,
// ...
];
Мне нужно сделать такой рандом, который чаще всего будет возращать тот ключ, у которого больший вес.
Приводим коэффициенты к целым числам пропорционально так, чтобы минимальный коэффициент равнялся единице, остальные округляем до единиц. Таким образом получаем на выходе массив с целыми числами, где отношения в пропорции элементов друг к другу будут близкими к изначальным. Далее на основе этого промежуточного массива генерируем новый, с диапазонами, для первого элемента от 0 до его значения, для каждого последующего от суммы всех предыдущих значений до сумма текущее значение. Таким образом весь массив диапазонами покрывает значения от 0 до суммы всех величин из первого промежуточного массива, которую обозначим как S. Далее используем только второй массив с диапазонами, для каждого элемента выборки генерим рандомное число R от 0 до S, и находим ключ согласно тому диапазону, куда в каждой итерации попадает R.