Ну мой первый вариант легко можно проапгрейдить, если не ставить задачу его однострочным делать, там нужно из while в do while переделать, плюс убрать count из условия.
а in_array медленнее проверки по ключу.
Вот мега алгоритм
vovanium
Да, проверка по ключу разительно быстрее in_array(). Надо будет иметь ввиду
А твой 3 вариант быстр при млом диапазоне, а при большом все же 2 вариант безспорный лидер
Ну так понятное дело что быстрее, так как в таком случае цикл выполняется один раз, и условие проверяется только один раз, а вот как только диапазон не очень большой, он сразу начинает тупить, так как при любом совпадении, он генерит 3 новых случайных числа. Ну и конечно нет универсальности, если нужно будет увеличить количество выбираемых данных, то условие будет веселое.
Вообще считаю, что здравомыслящие человеки такие "задачи" не ставят перед публикой, но все-же иногда хочется извратится. Задачу то можно и без циклов решить.