2013-11-23 7 views
-2

Функция рандомизации не работает должным образом. У меня есть массив, который становится рандомизированным.PHP array_rand не работает должным образом

Массив содержит три значения, но только два выбираются каждый раз.

$sterren = array("3","4","5"); 
$sterrenr = array_rand($sterren, 1); 
$sterrenf = $sterren[$sterrenr[0]]; 
echo $sterrenf; 

Во время цикла при выводе эхо $ sterrenf только значения 3 и 4 появляются, но не значение 5. Любой какие-либо идеи?

+0

Проверь первый пример, вы должны быть доступ к элементу 0 массива возврата: http://php.net/manual/en/function.array-rand.php – FaddishWorm

+0

Кроме того, не самые простые для чтения имена переменных: P – FaddishWorm

+0

Спасибо, но я обращаюсь к элементу 0, как вы можете видеть. –

ответ

4

Когда установлен дополнительный параметр $num, array_rand() возвращает $num случайные ключи. В этом случае вы устанавливаете второй параметр 1, поэтому вы получите один ключ. Вам просто нужно повторить соответствующий элемент массива:

Изменение:

$sterrenf = $sterren[$sterrenr[0]]; 

к:

$sterrenf = $sterren[$sterrenr]; 
+0

Спасибо, но он все еще только выдает 3 и 4. –

+1

@ r-d-r-b-3: Довольно уверен, что он вернет '5' тоже. См. [Demo] (http://3v4l.org/pJIbj). –

+0

На самом деле теперь он выводит 3,4 или 5. Так что да, это решение. Но не могли бы вы так любезно объяснить мне почему? Потому что я не вижу разницы. Когда я: $ sterrenr = array_rand ($ sterren, 3); Это будет генерировать $ sterrenr [0], [1], [2], удерживая значения 3,4 или 5. –

0

Очень легкий взгляд с:

Во-первых, чтобы получить эти три элемента указывают array_rand на (~, 3) не (~, 1).

Второй случайный, как вы думаете, путем shuffle в php, а не array_rand, потому что array_rand будет возвращать случайный выбор, но будет переупорядочивать их внутри него, поэтому после использования «shuffle()» на выходе массива результатов array_rand «like это то, что я имею в виду:

$sterren = array("3","4","5"); 
$sterrenr = array_rand($sterren, 3); 
shuffle($sterrenr); 
$sterrenf = $sterren[$sterrenr[0]]; 
echo $sterrenf; 
Смежные вопросы