Генерация случайных элементов в массиве на php учитывая стоимость кейса и стоимость предмета
Как превратить этот код
$case_cost = 39;
$list_skins = [
$skin_1 = ['GLOVES/Champion.webp', 'GLOVES', 'Champion', 'gradient_gold', 1899],
$skin_2 = ['GLOVES/Burning_Fists.webp', 'GLOVES', 'Burning Fists', 'gradient_gold', 2100],
$skin_3 = ['GLOVES/Steam_Rider.webp', 'GLOVES', 'Steam Rider', 'gradient_gold', 1400],
$skin_4 = ['GLOVES/Punk.webp', 'GLOVES', 'Punk', 'gradient_gold', 2887],
$skin_5 = ['AWM/BOOM.webp', 'AWM', 'BOOM', 'gradient_arcane', 200],
$skin_6 = ['M4A1/Bubblegum.webp', 'M4A1', 'Bubblegum', 'gradient_arcane', 249],
$skin_7 = ['USP/Chameleon.webp', 'USP', 'Chameleon', 'gradient_legendary', 23],
$skin_8 = ['Desert_Eagle/Orochi.webp', 'Desert Eagle', 'Orochi', 'gradient_legendary', 21],
$skin_9 = ['M60/Grunge.webp', 'M60', 'Grunge', 'gradient_legendary', 20],
$skin_10 = ['Famas/Anger.webp', 'Famas', 'Anger', 'gradient_epic', 3],
$skin_11 = ['M60/Steam_Beast.webp', 'M60', 'Steam Beast', 'gradient_epic', 2.90],
$skin_12 = ['MP7/Palace.webp', 'MP7', 'Palace', 'gradient_epic', 2.70],
$skin_13 = ['P350/Oni.webp', 'P350', 'Oni', 'gradient_rare', 0.56],
$skin_14 = ['M4/Demon.webp', 'M4', 'Demon', 'gradient_rare', 0.55],
$skin_15 = ['M4A1/Kitsune.webp', 'M4A1', 'Kitsune', 'gradient_rare', 0.65],
$skin_16 = ['TEC9/Tropic.webp', 'TEC9', 'Tropic', 'gradient_rare', 0.52],
$skin_17 = ['AKR/Scale.webp', 'AKR', 'Scale', 'gradient_uncommon', 0.17],
$skin_18 = ['AWM/Elevation.webp', 'AWM', 'Elevation', 'gradient_uncommon', 0.24],
$skin_19 = ['SM1014/Tropic.webp', 'SM1014', 'Tropic', 'gradient_uncommon', 0.10],
$skin_20 = ['UMP45/Peaceful.webp', 'UMP45', 'Peaceful', 'gradient_uncommon', 0.11],
$skin_21 = ['AKR12/Roar.webp', 'AKR12', 'Roar', 'gradient_common', 0.05],
$skin_22 = ['G22/Scale.webp', 'G22', 'Scale', 'gradient_common', 0.07],
];
$num_items = count($list_skins);
for ($cycle = 0; $cycle < count($list_skins); $cycle++) {
$num_items;
}
в случайную генерацию элементов из этого массива с помощью этих скриншотов


Ответы (1 шт):
Окей. Попробую сформулировать задачу за вас. Но имейте в виду, что умение правильно сформулировать проблему это важный навык разработчика. Если вы хотите научится программировать, то вам надо учиться ясно формулировать задачи.
Итак:
Есть сундук с предметами. У сундука есть стоимость и у предметов есть стоимость. При открытии сундука из него выпадает один из предметов. Необходимо придумать алгоритм выбора выпадающего предмета с вероятностью тем большей, чем ближе стоимости сундука и предмета.
Как решить такую задачу? По моему опыту, для решения задач надо подумать. Подумать помогают рисунки, примеры и аналогии. Давайте нарисуем цены сундука и предметов на числовой оси:
---0---1---2---3---4---5---6---7---
| | | |
? ?️ ? ?
Теперь разница между ценой сундука и ценой предмета очень наглядна. То что ближе к сундуку, выпадет с большей вероятностью. Сумма этих вероятностей должна быть равна 1 (100%) -- что-нибудь обязательно выпадет. Тут простая арифметика:
? 1
--------- = ---------------------------------
1/(5 - 1) 1/(5 - 1) + 1/(5 - 3) + 1/(7 - 5)
? = 1/5
?️ = 2/5
? = 2/5
Осталось выбрать предмет броском кубика. Снова порисуем:
---0---0.2-----------0.6-----------1---
| | | |
?????️?️?️?️?️?️?️?️????????
То есть мы бросаем кубик с от 0 до 1 рациональными гранями (это воображаемый кубик, поэтому у него может быть любое удобное нам количество граней :-). Если выпадет до 0.2 -- из сундука выпадет ?, 0.2-0.6 -- ?️, 0.6-1 -- ?.