Как распределить позицию элемента в формате топа
Нужно распределить позицию в топе (максимум ТОП-5) согласно табличному значению. Размер входного массива может быть разный.
Сейчас составил только такое решение, которое выглядит неоптимально:
$arr = [["ID" => 1],["ID" => 2],["ID" => 3],["ID" => 4],["ID" => 5],["ID" => 6],["ID" => 7],["ID" => 8],["ID" => 9],["ID" => 10]];
$topOne = round((count($arr) * (10 / 100))); // TOP 1 = 10% от всех позиций
$topTwo = round((count($arr) * (20 / 100))); // TOP 2 = 20% от всех позиций
$topThree = round((count($arr) * (20 / 100))); // TOP 3 = 20% от всех позиций
$topFore = round((count($arr) * (20 / 100))); // TOP 4 = 20% от всех позиций
$topFive = round((count($arr) * (30 / 100))); // TOP 5 = 30% от всех позиций
$step = 0;
for ($i = $step; $i < $topOne; $i++) {
$arr[$i] = ["TOP_POSITION" => 1];
$step++;
}
$next = $step + $topTwo;
for ($i = $step; $i < $next; $i++) {
$arr[$i] = ["TOP_POSITION" => 2];
$step++;
}
$next = $step + $topThree;
for ($i = $step; $i < $next; $i++) {
$arr[$i] = ["TOP_POSITION" => 3];
$step++;
}
$next = $step + $topFore;
for ($i = $step; $i < $next; $i++) {
$arr[$i] = ["TOP_POSITION" => 4];
$step++;
}
$next = $step + $topFive;
for ($i = $step; $i < $next; $i++) {
$arr[$i] = ["TOP_POSITION" => 5];
$step++;
}
Источник: Stack Overflow на русском