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

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

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

Ответы [ 16 ]

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

Вы также можете сделать только:

$k = array_rand($array);
$v = $array[$k];

Это способ сделать это, когда у вас есть ассоциативный массив.

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

PHP предоставляет функцию только для этого: array_rand ()
http://php.net/manual/en/function.array-rand.php

$ran = array(1,2,3,4);
$randomElement = $ran[array_rand($ran, 1)];
21 голосов
/ 29 октября 2009

Вы можете использовать mt_rand ()

$random = $ran[mt_rand(0, count($ran) - 1)];

Эта функция также пригодится, если вам нужно значение

function random_value($array, $default=null)
{
    $k = mt_rand(0, count($array) - 1);
    return isset($array[$k])? $array[$k]: $default;
}
18 голосов
/ 12 января 2015
$value = $array[array_rand($array)];
12 голосов
/ 08 октября 2013

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

$array = array("one", "two", "three", "four", "five", "six");
echo $array[array_rand($array, 1)];

или вы можете использовать функции rand и count для выбора случайного индекса.

$array = array("one", "two", "three", "four", "five", "six");
echo $array[rand(0, count($array) - 1)];
10 голосов
/ 15 октября 2015

Получено от Laravel Collection::random():

function array_random($array, $amount = 1)
{
    $keys = array_rand($array, $amount);

    if ($amount == 1) {
        return $array[$keys];
    }

    $results = [];
    foreach ($keys as $key) {
        $results[] = $array[$key];
    }

    return $results;
}

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

$items = ['foo', 'bar', 'baz', 'lorem'=>'ipsum'];

array_random($items); // 'bar'
array_random($items, 2); // ['foo', 'ipsum']

Несколько заметок:

  • $amount должно быть меньше или равно count($array).
  • array_rand() не тасует ключи (начиная с PHP 5.2.10, см. 48224 ), поэтому выбранные вами предметы всегда будут в исходном порядке. При необходимости используйте shuffle().


Документация: array_rand(), shuffle()


edit: С тех пор заметно возросла функция Laravel, см. Laravel 5.4 Arr::random(). Вот что-то более сложное, полученное из взрослой функции Laravel:

function array_random($array, $number = null)
{
    $requested = ($number === null) ? 1 : $number;
    $count = count($array);

    if ($requested > $count) {
        throw new \RangeException(
            "You requested {$requested} items, but there are only {$count} items available."
        );
    }

    if ($number === null) {
        return $array[array_rand($array)];
    }

    if ((int) $number === 0) {
        return [];
    }

    $keys = (array) array_rand($array, $number);

    $results = [];
    foreach ($keys as $key) {
        $results[] = $array[$key];
    }

    return $results;
}

Несколько основных моментов:

  • Бросьте исключение, если недостаточно доступных предметов
  • array_random($array, 1) возвращает массив из одного элемента ( # 19826 )
  • Значение поддержки "0" для количества элементов ( # 20439 )
7 голосов
/ 04 июля 2014

Похоже, что функция array_rand имеет неравномерное распределение в больших массивах, не каждый элемент массива одинаково вероятен для выбора. Использование shuffle в массиве с последующим взятием первого элемента не имеет этой проблемы:

$myArray = array(1, 2, 3, 4, 5);

// Random shuffle
shuffle($myArray);

// First element is random now
$randomValue = $myArray[0];
4 голосов
/ 29 октября 2009
$rand = rand(1,4);

или специально для массивов:

$array = array('a value', 'another value', 'just some value', 'not some value');
$rand = $array[ rand(0, count($array)-1) ];
3 голосов
/ 30 июля 2018

Еще один подход с помощью переворачивания массива для получения прямого значения.

Отрывок

$array = [ 'Name1' => 'John', 'Name2' => 'Jane', 'Name3' => 'Jonny' ];
$val = array_rand(array_flip($array));

array_rand ключ возврата не значение. Итак, мы переключаем значение в качестве ключа.

Примечание: Ключ PHP всегда должен быть уникальным ключом, поэтому при переворачивании массива дублирующее значение в качестве ключа будет перезаписано.

2 голосов
/ 06 мая 2017

Используйте rand (), чтобы получить случайное число для отображения случайного ключа. Например: 0 - 3

$ran = array(1,2,3,4);
echo $ran[rand(0,3)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...