@pathpod

Умная сортировка массива с выводом 5 элементов без повторений. Так ли это?

Значит пользовался такой функцией
// Сортируем по весу
	static function get_sort($names, $n, $ret = array()) {
		if ($n == 0) {
			return $ret;
		} else {
			$totalchance = 0;
			$partialsums = [];
			foreach ($names as $name) {
				$totalchance += $name[1];
				array_push($partialsums, $totalchance);
			}
			$chance = rand(0, $totalchance);
			
			$nameindex = 0;
			foreach ($partialsums as $ps) {
				if ($ps >= $chance) {
					break;
				}
				$nameindex++;
			}
			$name = $names[$nameindex];
			array_push($ret, $name);
			unset($names[$nameindex]);
			$names = array_values($names);
			return self::get_sort($names, $n-1, $ret);
		}
	}


Вызов/получение массива:
$ids = class::get_sort($user_id_list, 5);
$user_id_list содержит такого рода массив:

Array
(
    [0] => Array
        (
            [0] => 273904544
            [1] => 0.4
        )

    [1] => Array
        (
            [0] => 376650423
            [1] => 0.78
        )

    [2] => Array
        (
            [0] => 396253653
            [1] => 0
        )
......


Массив может большим вплоть до 1000+

Описание функции:
Из всего массива idшников выводится 5 случайных, но учиваются числа привязанные к idшникам, чем выше это число, тем больше вероятность попасть в список чем у других у кого число меньше.

Так ли это работает? Я проверял, вроде все хорошо, но есть недостатки, один из них это то, что когда получаю список, тот у кого из этих 5 имел больше число, не обязательно стоит на первом месте в массиве, он может быть в любом другом. Получается функция выбирает после каждого элемента следующего начиная все по новой но исключает повторения?
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы