Получение случайных N перестановок числового массива с использованием переполнения стека

Я нашел эту функцию, когда искал самый быстрый способ найти все возможные перестановки числового массива.

private function permute(array $elements)
{
if (count($elements) <= 1) {
yield $elements;
} else {
foreach ($this->permute(array_slice($elements, 1)) as $permutation) {
foreach (range(0, count($elements) - 1) as $i) {
yield array_merge(
array_slice($permutation, 0, $i),
[$elements[0]],
array_slice($permutation, $i)
);
}
}
}
}

Что мне нужно, это перемешать его результаты и получить случайные N перестановок числового массива.

Проблема в том, что он возвращает объект, и невозможно перемешать его результат.

Любые предложения?
Какие-либо предложения

0

Решение

Этот метод возвращает экземпляр Класс генератора. И это предсказуемо, так как он использует yield вместо return, Вы можете зациклить этот объект с foreachили, в вашем случае вы, можете получить весь массив перестановок с iterator_to_array (это возможно, потому что генератор реализует Проходной интерфейс).

$permutations = iterator_to_array(permute($array));

shuffle($permutations);

$result = array_slice($permutations, 0, 3);

Вот рабочая демо.

Ты можешь читать больше о генераторах.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]