Почему не работает array_rand, когда я запрашиваю только один элемент? - PullRequest
1 голос
/ 14 сентября 2011

Правильно работает следующее:

<?php
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($input, 2);
echo $input[$rand_keys[0]] . "\n";
echo $input[$rand_keys[1]] . "\n";
?>

Но это не так:

<?php
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($input, 1);
echo $input[$rand_keys[0]] . "\n";
?>

Почему array_rand не работает, когда я запрашиваю только один случайный индекс?

Ответы [ 4 ]

6 голосов
/ 14 сентября 2011

Из руководства:

Если вы выбираете только одну запись, array_rand () возвращает ключ для случайной записи.В противном случае он возвращает массив ключей для случайных записей.

Поэтому:

  • Когда вы получаете только одну случайную запись, вы просто используете $input[$rand_key].
  • При получении нескольких случайных записей вы используете $input[$rand_key[0]] (или другой индекс вплоть до числа выбранных случайных ключей)
3 голосов
/ 14 сентября 2011

С php docs :

Если вы выбираете только одну запись, array_rand () возвращает ключ для случайной записи.В противном случае он возвращает массив ключей для случайных записей.Это сделано для того, чтобы вы могли выбрать случайные ключи, а также значения из массива.

Во втором примере вам нужен только 1 случайный ключ, поэтому он не возвращает массив.

2 голосов
/ 14 сентября 2011

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

0 голосов
/ 25 июня 2016
<?php
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($input);
echo $input[$rand_keys] . "<br>";
?>

это верный код, который будет возвращать только 1 результат массива.

...