Intereting Posts
SilverStripe 3 Фильтрация / фильтрация DataObjects в функции Получите идентификатор определенного URL-адреса внутри сообщения и сохраните его в переменной Автоматический вход на текущий веб-сайт, если пользователь вошел в систему на другом веб-сайте Что такое Python, что «взрывается» для PHP? Echo не показывает скопированный текст из txt-файла для формирования текстовой области PHP Как добавить дополнительные метаданные в PNG? Почему эти Heredoc и Nowdoc вызывают ошибки? Выполнить php-файл с помощью Ajax Могу ли я использовать логическое «или» в случае с предложением оператора PHP? Как найти следующий числовой индекс существующего массива? Показать / скрыть div с jQuery и AJAX не работает должным образом Как отображать RSS-каналы с других сайтов Модель – Вид – Новая перспектива контроллера Получение кода ответа заголовка Проблема с привязкой параметра Mysqli

PHP, как получить случайное число, отличное от значений массива

Пример: у меня есть массив с тремя значениями:

0 = 1 1 = 4 2 = 5 

Я хочу получить случайное число, подобное

 $random = rand(1, 5); 

Но мне нужно получить число, отличное от значений массива. Мне нужно, чтобы он вернулся 2 или 3.

Related of "PHP, как получить случайное число, отличное от значений массива"

Это должно сработать для вас:

(Здесь я создаю диапазон, откуда вы получаете свое случайное число с range() . Затем я избавляюсь от этих чисел, которые вы не хотите использовать с array_diff() . И в конце вы можете просто использовать array_rand() чтобы получить случайный ключ / номер)

 <?php $blacklist = [1, 4, 5]; $range = range(1, 5); $randomArray = array_diff($range, $blacklist); echo $randomArray[array_rand($randomArray, 1)]; ?> 

вывод:

 2 or 3 

РЕДАКТИРОВАТЬ:

Просто сделали некоторые тесты, и метод с циклом намного медленнее, чем код выше!

Я создал массив (черный список) из 1 … 100'000 и массив случайных чисел от 1 … 100'001.

Таким образом, скрипт должен создавать только одно уникальное случайное число. С помощью метода loop вы получите сообщение об ошибке:

Неустранимая ошибка: превышено максимальное время выполнения 30 секунд

И с размещенным выше кодом это занимает в среднем 1,5 секунды.