Форум программистов, компьютерный форум, киберфорум
Наши страницы

PHP для начинающих

Войти
Регистрация
Восстановить пароль
 
Vetrox
5 / 5 / 0
Регистрация: 08.10.2012
Сообщений: 175
#1

Выбрать случайное из 10 число, без повторов - PHP

14.02.2018, 22:33. Просмотров 260. Ответов 12
Метки нет (Все метки)

Нужна функция, при вызове которой возвращала одно из 10 чисел, но каждый раз это число не должно повторятся!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2018, 22:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выбрать случайное из 10 число, без повторов (PHP):

Как получить случайное число без повтора - PHP
Здравствуйте, как получить случайное число? Но так что бы исключить следующий шаг с повтором, то есть если было 5 то следующие ни как не...

Выделения без повторов - PHP
Как выделить из таблицы game7 avatar но без повторов.

Выбрать уникальное случайное знаечение из БД - PHP
Здравствуйте! Необходимл выбрать по одному уникальному и СЛУЧАЙНОМУ значению из бд. Сама структура БД такая: id | user_id | pic_name ...

Ключи из файла, без повторов - PHP
Нужно написать пхп код. Суть: При нажатие на кнопку выдаёт код из файла, но чтобы коды не повторялись.(и можно только получить 1 раз)

Массив из случайных чисел без повторов - PHP
Всем здрасте,надо сделать массив из случайных чисел без повторов не функция набрел на следущее... for($i=0;$i<30;$i++) { ...

Как выбрать из текста числа и оставить одно случайное? - PHP
как выбрать из текста числа и оставить одно случайное? response: { count: 14, items: }

12
Jewbacabra
Эксперт PHP
3021 / 2608 / 970
Регистрация: 24.04.2014
Сообщений: 7,976
14.02.2018, 23:08 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
PHP
1
2
3
4
5
6
7
8
9
10
11
function randomGenerator() {
    $array = range(1, 10);
    shuffle($array);
    foreach ($array as $rand) {
        yield $rand;
    }
}
 
foreach (randomGenerator() as $rand) {
    echo $rand, PHP_EOL;
}
1
Vetrox
5 / 5 / 0
Регистрация: 08.10.2012
Сообщений: 175
15.02.2018, 09:31  [ТС] #3
Спасибо! а как спрятать 9-11 строчку во внутрь функции, т.к. нужно не сразу вывести эти числа а по одному числу 10 раз
0
Para bellum
Эксперт PHP
3143 / 2906 / 643
Регистрация: 06.01.2011
Сообщений: 8,487
15.02.2018, 11:50 #4
Уберите foreach вообще. Вызывайте randomGenerator() когда нужно. Там foreach для примера.
1
Vetrox
5 / 5 / 0
Регистрация: 08.10.2012
Сообщений: 175
15.02.2018, 12:20  [ТС] #5
PHP
1
2
3
4
5
6
7
8
9
function randomGenerator() {
    $array = range(1, 10);
    shuffle($array);
    foreach ($array as $rand) {
        yield $rand;
    }
}
 
randomGenerator();
не работает!
0
Para bellum
Эксперт PHP
3143 / 2906 / 643
Регистрация: 06.01.2011
Сообщений: 8,487
15.02.2018, 12:22 #6
Работает. Для вывода есть специальные конструкции.

Добавлено через 17 секунд
PHP
1
echo randomGenerator();
1
Vetrox
5 / 5 / 0
Регистрация: 08.10.2012
Сообщений: 175
15.02.2018, 15:10  [ТС] #7
Прошу у вас прощения, проверьте пожлста, все равно не работает!

Recoverable fatal error: Object of class Generator could not be converted to string

PHP
1
2
3
4
5
6
7
8
9
function randomGenerator() {
    $array = range(1, 10);
    shuffle($array);
    foreach ($array as $rand) {
        yield $rand;
    }
}
 
echo randomGenerator();
0
Para bellum
Эксперт PHP
3143 / 2906 / 643
Регистрация: 06.01.2011
Сообщений: 8,487
15.02.2018, 16:09 #8
Прошу прощения. Сильно ошибся с выводом.

Добавлено через 52 минуты
Могу предложить такой вариант:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
function random()
{
    static $numbers;
    
    if (!$numbers) {
        $numbers = range(1, 10);
    
        shuffle($numbers);
    }
    
    return array_pop($numbers);
}
Выводить проще:
PHP
1
2
3
4
5
# Где-то в одном месте
echo random();
 
# Где-то в другом месте
echo random();
1
Vetrox
5 / 5 / 0
Регистрация: 08.10.2012
Сообщений: 175
15.02.2018, 19:42  [ТС] #9
Мэрси, заработало!
0
Jewbacabra
Эксперт PHP
3021 / 2608 / 970
Регистрация: 24.04.2014
Сообщений: 7,976
15.02.2018, 21:26 #10
Vetrox, вызов randomGenerator каждый раз создает новый генератор. Можно вместо foreach дергать вручную
PHP
1
2
3
4
$generator = randomGenerator();
echo $generator->current(), PHP_EOL;
$generator->next();
echo $generator->current();
1
Vetrox
5 / 5 / 0
Регистрация: 08.10.2012
Сообщений: 175
16.02.2018, 11:20  [ТС] #11
спасибо, сравню

Добавлено через 2 часа 35 минут
если range(1, 10);то всегда всё отлично работает, если 10 увеличить до 20, то никогда не выпадают все числа, как минимум один повтор, пример:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
10
18
5
11
15
9
8
19
20
2
13
14
5
1
8
3
17
9
15
Добавлено через 2 минуты
две 8-ки, две 9-ки, нет 12-ти, и 16ти, в чем может проблема?(всегда не два числа и два дублируется...)
0
полудух
177 / 161 / 30
Регистрация: 15.03.2016
Сообщений: 960
16.02.2018, 21:09 #12
в руках походу, норм всё работает
это если цикл больше массива, то будут дубли
1
Vetrox
5 / 5 / 0
Регистрация: 08.10.2012
Сообщений: 175
05.03.2018, 19:15  [ТС] #13
shuffle Эта функция перемещает элементы массива в случайном порядке.

Пример 1. Пример использования shuffle()

PHP
1
2
3
4
5
6
7
8
<?php
$numbers = range(1, 20);
srand((float)microtime() * 1000000);
shuffle($numbers);
while (list(, $number) = each($numbers)) {
    echo "$number ";
}
?>
0
05.03.2018, 19:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2018, 19:15
Привет! Вот еще темы с ответами:

Выбирать из директории без повторов, если были выбраны все то заного начинать - PHP
Добрый день, я верстальщик, поэтому не ругайте ) В общем я делаю следующее... Есть страница на которой имеются табы, например TAB_1 и...

Случайное число - PHP
Добрый всем день, у меня возник вопрос существует ли у PHP стандартная функция случайного числа? Если же она не существует тогда может...

случайное число - PHP
Здравствуйте! Подскажите, пожалуйста, как можно вывести случайное число. Смысл скрипта: вывести случайный месяц и сообщить его...

Как присвоить фонт случайное число - PHP
не могу сообразить как это сделать, сделал вот так но не получается.. &lt;body&gt; &lt;h1&gt;Привет!&lt;/h1&gt; &lt;?php $fnt = rand(10,24); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru