@cannabioid1337

Цикл уходит в бесконечность, как пофиксить?

У меня есть код, в котором создается массив $steps с массивами с 1 по 7.
В каждом массиве position должен быть рандомным, но при этом уникальным.
По этому я делаю цикл рандома, пока в массиве $positions (в него вношу уже сгенерированные цифры) не будет полученного числа.

Но это выдает ошибку в 60 секунд:
$steps = [];

        for ($i = 1; $i <=7; $i++) 
        {
            $positions = [];
            for ($coefs = 1; $coefs <= $i; $coefs++) 
            {   
                $created = false;

                do {
                    $rand = random_int(1, 6);
                    if (isset($positions[$rand]) === false) {
                        $created = true;
                    } else {
                        $created = false;
                    }
                } while ($created == false);

                $steps[$i][$coefs] = ['position' => $rand, 'positions' => $positions];
                $positions[$rand] = true;
            }
           
        }
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 1
Fragster
@Fragster
помогло? отметь решением!
вместо попытки выбросить отсутствующий элемент проще создать массив с последовательными значениями и выбирать из него случайные элементы в диапазоне от 0 до length-1 на каждой итерации, удаляя выбранный.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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