Что можно сократить в данном php коде?
<?php
function getClosest($search, $array)
{
$num = null;
foreach ($array as $item) {
if ($item['chance'] < $search) {
continue;
}
if ($num === null || $item['chance'] < $num['chance']) {
$num = $item;
}
}
return $num;
}
$case_cost = 100;
$skins = [
$skin = ['cost' => 10000],
$skin = ['cost' => 0.01],
$skin = ['cost' => 5256],
$skin = ['cost' => 425.2],
$skin = ['cost' => 92.4],
$skin = ['cost' => 3124],
$skin = ['cost' => 0.32],
$skin = ['cost' => 213],
];
$array_chance = [];
$array_sum = 0;
foreach ($skins as $item) {
if ($case_cost >= $item['cost']) {
$result = $case_cost / $item['cost'];
} else {
$result = $case_cost * $item['cost'] / 100;
}
$result = round($result);
$array_sum += $result;
array_push($array_chance, $result);
}
$rand_num = rand(0, $array_sum);
$i = 0;
$accum = 0;
foreach ($array_chance as $skin) {
$skins[$i]['chance'] = $skin;
$i++;
}
$accum = 0;
foreach ($skins as &$skin) {
$accum = $skin['chance'] += $accum;
}
print_r($skins);
$rand_element = getClosest($rand_num, $skins);
echo '<br>' . $rand_num . '<br>';
print_r($rand_element);
Данный код выбирает случайный элемент из массива согласно алгоритму.
Источник: Stack Overflow на русском