Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: help! array_rand()

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Помогите новичку.
dub13
Отправлено: 15 Апреля, 2017 - 14:39:58
Post Id



Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Дорого времени суток! Я совсем недавно начал изучать php и начал с простейших задач, которые находил на просторах интернета. С одной из них у меня возникли некоторые трудности, но в итоге я ее все-таки решил (можно сказать "нашел решение"). Ниже условие и мой код:

Сделаем программу, отвечающую на любой вопрос. Для этого создадим массив с возможными вариантами ответов, сгенерируем случайное число и возьмем из массива элемент с таким номером.

1 <?php
2
3 error_reporting(-1);
4
5 $question = 'Bla-bla-bla?';
6
7 echo $question. '<br>';
8
9 $answers = array("yes", "no", "idk", "ask anon", "depends on you");
10 $rand_keys = array_rand($answers, 2);
11 echo $answers[$rand_keys[1]] . "\n";
12
13 ?>

Работает все отлично, вот только мне не понятен принцип работы функции array_rand(). Почему в 10 строке нужно использовать число 2, а в 11 число 1? С 1 и 0, например, не работает. А может возможно написать ее попроще?
Может кто-нибудь может мне в краце, а лучше подробно, объяснить принцип работы этой функции? Спасибо! Прощайте
 
 Top
Строитель Модератор
Отправлено: 15 Апреля, 2017 - 16:12:23
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




dub13 пишет:
А может возможно написать ее попроще?
PHP:
скопировать код в буфер обмена
  1. $answers = array("yes", "no", "idk", "ask anon", "depends on you");
  2.  
  3. echo $answers[array_rand($answers)] . "\n";
dub13 пишет:
объяснить принцип работы этой функции
Вот подробное описание: array_rand()
 
 Top
dub13
Отправлено: 15 Апреля, 2017 - 16:15:27
Post Id



Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Строитель пишет:
dub13 пишет:
А может возможно написать ее попроще?
PHP:
скопировать код в буфер обмена
  1. $answers = array("yes", "no", "idk", "ask anon", "depends on you");
  2.  
  3. echo $answers[array_rand($answers)] . "\n";
dub13 пишет:
объяснить принцип работы этой функции
Вот подробное описание: array_rand()


Читая мануал я ничего не понял(
За простое решение спасибо!
 
 Top
Строитель Модератор
Отправлено: 15 Апреля, 2017 - 16:26:35
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




dub13 пишет:
Читая мануал я ничего не понял
Ну, тогда имеет смысл или прочитать его ещё раз... и ещё...

Или задать конкретный вопрос, что именно вам не понятно?
 
 Top
Ermite
Отправлено: 16 Апреля, 2017 - 19:33:56
Post Id


Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Февр. 2016  


Помог: 0 раз(а)




dub13 пишет:
Работает все отлично, вот только мне не понятен принцип работы функции array_rand(). Почему в 10 строке нужно использовать число 2, а в 11 число 1? С 1 и 0, например, не работает. А может возможно написать ее попроще?

Потому что, если ввести число 2 или более - функция вернёт массив. 1 - строку, а 0 - ошибку.
Видимо, вы делали так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $rand_keys = array_rand($answers, 1);
  2. echo $answers[$rand_keys[1]];

$rand_keys[1] не существует, т.к. функция передала нам строку (число).
Правильнее будет так:
PHP:
скопировать код в буфер обмена
  1. $answers = array("yes", "no", "idk", "ask anon", "depends on you");
  2. $rand_keys = array_rand($answers, 1);
  3. echo $answers[$rand_keys] . "\n";
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB