Как получить случайное значение из массива - PullRequest
105 голосов
/ 29 октября 2009

У меня есть массив с именем $ran = array(1,2,3,4);

Мне нужно получить случайное значение из этого массива и сохранить его в переменной, как я могу это сделать?

Ответы [ 16 ]

2 голосов
/ 08 декабря 2015

Имеет ли ваш выбор какие-либо последствия для безопасности? Если это так, используйте random_int() и array_keys(). (random_bytes() - это только PHP 7, но для PHP 5 есть polyfill).

function random_index(array $source)
{
    $max = count($source) - 1;
    $r = random_int(0, $max);
    $k = array_keys($source);
    return $k[$r];
}

Использование:

$array = [
    'apple' =>   1234,
    'boy'   =>   2345,
    'cat'   =>   3456,
    'dog'   =>   4567,
    'echo'  =>   5678,
    'fortune' => 6789
];
$i = random_index($array);
var_dump([$i, $array[$i]]);

Демо: https://3v4l.org/1joB1

1 голос
/ 23 июня 2019

В моем случае я должен получить 2 значения, которые являются объектами. Я разделяю это простое решение.

$ran = array("a","b","c","d");
$ranval = array_map(function($i) use($ran){return $ran[$i];},array_rand($ran,2));
0 голосов
/ 03 мая 2019

Это будет хорошо работать с встроенными массивами. Кроме того, я думаю, что все становится более уместным и более пригодным для повторного использования, когда оно заключено в функцию.

function array_rand_value($a) {
    return $a[array_rand($a)];
}

Использование:

array_rand_value(array("a", "b", "c", "d"));

В PHP <7.1.0 <code>array_rand() использует rand(), поэтому вы не захотите использовать эту функцию для чего-либо связанного с безопасностью или криптографией. На PHP 7.1.0+, используйте эту функцию без беспокойства, так как rand() имеет псевдоним mt_rand().

0 голосов
/ 06 сентября 2018

Одна строка: $ran[rand(0, count($ran) - 1)]

0 голосов
/ 21 сентября 2015

Я основываю свой ответ на функции @ ÓlafurWaage. Я пытался использовать его, но столкнулся с проблемами со ссылками, когда пытался изменить возвращаемый объект. Я обновил его функцию, чтобы передать и вернуться по ссылке. Новая функция:

function &random_value(&$array, $default=null)
{
    $k = mt_rand(0, count($array) - 1);
    if (isset($array[$k])) {
        return $array[$k];
    } else {
        return $default;
    }
}

Для получения дополнительной информации, см. Мой вопрос на Передача / возврат ссылок на объект + изменение объекта не работает

0 голосов
/ 29 октября 2009

Вы получаете случайное число из массива следующим образом:

$randomValue = array_rand($rand,1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...