如何从数组中获取随机值

Rol*_*and 112 php arrays random

我有一个名为的数组 $ran = array(1,2,3,4);

我需要从这个数组中获取一个随机值并将其存储在变量中,我该怎么做?

rek*_*o_t 218

你也可以这样做:

$k = array_rand($array);
$v = $array[$k];
Run Code Online (Sandbox Code Playgroud)

当你有一个关联数组时,这是这样做的方法.

  • 根据这个[评论](http://www.php.net/manual/en/function.array-rand.php#105265)`array_rand`不是随机的,应该是 (11认同)
  • 从PHP 7.1开始,[`array_rand()`](http://php.net/manual/en/function.array-rand.php)使用Mersenne Twister生成器:[rand()别名为mt_rand()和srand(别名为mt_srand()](http://php.net/manual/en/migration71.incompatible.php#migration71.incompatible.rand-sr​​and-aliases).在实践中,它现在应该足够好了. (8认同)

NDM*_*NDM 30

PHP提供了一个函数:array_rand()
http://php.net/manual/en/function.array-rand.php

$ran = array(1,2,3,4);
$randomElement = $ran[array_rand($ran, 1)];
Run Code Online (Sandbox Code Playgroud)

  • “ array_rand”函数的第二个参数的默认值为“ 1”,因此不需要编写它。 (2认同)

Óla*_*age 22

你可以使用mt_rand()

$random = $ran[mt_rand(0, count($ran) - 1)];
Run Code Online (Sandbox Code Playgroud)

如果您需要该值,这也可以作为一个功能使用

function random_value($array, $default=null)
{
    $k = mt_rand(0, count($array) - 1);
    return isset($array[$k])? $array[$k]: $default;
}
Run Code Online (Sandbox Code Playgroud)

  • 应该是mt_rand(0,3),因为只有4个项目.但更正确的是:$ array [mt_rand(0,count($ array)] (4认同)
  • 呃,我想你的意思是mt_rand(0,count($ ran) - 1) (2认同)

KAS*_*KAS 20

$value = $array[array_rand($array)];
Run Code Online (Sandbox Code Playgroud)


Jak*_*ake 13

您可以使用array_rand函数从数组中选择一个随机密钥,如下所示.

$array = array("one", "two", "three", "four", "five", "six");
echo $array[array_rand($array, 1)];
Run Code Online (Sandbox Code Playgroud)

或者您可以使用rand和count函数来选择随机索引.

$array = array("one", "two", "three", "four", "five", "six");
echo $array[rand(0, count($array) - 1)];
Run Code Online (Sandbox Code Playgroud)


Gra*_*ble 10

源自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;
}
Run Code Online (Sandbox Code Playgroud)

用法:

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

array_random($items); // 'bar'
array_random($items, 2); // ['foo', 'ipsum']
Run Code Online (Sandbox Code Playgroud)

几点说明:

  • $amount必须小于或等于count($array).
  • array_rand()不会随机播放密钥(因为PHP 5.2.10,请参阅48224),因此您选择的项目将始终按原始顺序排列.shuffle()如果需要,请在之后使用.


文档:array_rand(),shuffle()


编辑:从那时起,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;
}
Run Code Online (Sandbox Code Playgroud)

一些亮点:

  • 如果没有足够的可用项目,则抛出异常
  • array_random($array, 1)返回一个项目的数组(#19826)
  • 物品数量支持值"0"(#20439)


Asc*_*iom 8

array_rand函数似乎在大型数组上具有不均匀分布,并非每个数组项都可能被选中.在数组上使用shuffle然后获取第一个元素没有这个问题:

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

// Random shuffle
shuffle($myArray);

// First element is random now
$randomValue = $myArray[0];
Run Code Online (Sandbox Code Playgroud)


Dur*_*oth 6

$rand = rand(1,4);
Run Code Online (Sandbox Code Playgroud)

或者,特别是对于数组:

$array = array('a value', 'another value', 'just some value', 'not some value');
$rand = $array[ rand(0, count($array)-1) ];
Run Code Online (Sandbox Code Playgroud)

  • 你永远不会得到这个列表中的第一项,你会用 4 离开数组 (2认同)

Sid*_*Sid 6

上线:

echo $array[array_rand($array,1)]
Run Code Online (Sandbox Code Playgroud)


Sma*_*pal 5

另一种方法是通过翻转数组来获得直接价值。

片段

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

array_rand返回键不值。因此,我们将价值作为关键。

注意: PHP键始终是唯一键,因此,当数组被翻转时,作为键的重复值将被覆盖。