Пример: у меня есть массив с тремя значениями:
0 = 1 1 = 4 2 = 5
Я хочу получить случайное число, подобное
$random = rand(1, 5);
Но мне нужно получить число, отличное от значений массива. Мне нужно, чтобы он вернулся 2 или 3.
Это должно сработать для вас:
(Здесь я создаю диапазон, откуда вы получаете свое случайное число с 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 секунды.