Это должно работать для вас:.
(Здесь я создаю диапазон от того, где вы получите ваше случайное число с 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
EDIT:
Просто сделал некоторые тесты и метод с циклом намного медленнее, чем код выше!
Я создал массив (черный список) из 1 ... 100'000 и массив случайных чисел от 1 ... 100'001.
Так что сценарий должен создавать только одно уникальное случайное число. При использовании метода петли вы получите сообщение об ошибке:
Fatal error: Maximum execution time of 30 seconds exceeded
И с размещенным выше кодом в среднем требуется 1,5 секунды.
Итак, у вас есть диапазон от того места, где вы хотите получить случайное число, но без цифр из вашего массива, не так ли? Также вы что-то пробовали? – Rizier123
Итак 'do {$ random = rand (1, 5); } while (in_array ($ random, $ myArray)); ' –
Спасибо за ответ! Это сработало, но иногда я получаю Fatal Error: Неустранимая ошибка: превышено максимальное время выполнения 30 секунд – Rockman