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