Что можно сократить в данном php коде?

Рейтинг: 0Ответов: 1Опубликовано: 21.02.2023
<?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);

Данный код выбирает случайный элемент из массива согласно алгоритму.

Ответы

▲ 0

Вот как я смог сократить

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;
}

function getSkin($skins, $case_cost) {
  $accum = 0;
  $array_sum = 0;
  foreach ($skins as &$skin) {
    if ($case_cost >= $skin['cost']) {
      $chance = $case_cost / $skin['cost'] * 1000;
    } else {
      $chance = ($case_cost * $skin['cost']) * 1000;
    }

    $chance = round($chance);
    $array_sum += $chance;
    $skin['chance'] = $chance;
    $accum = $skin['chance'] += $accum;
  }
  $rand_num = rand(0, $array_sum);

  $rand_element = getClosest($rand_num, $skins);
  return $rand_element;
}