如何从数组中得到随机值?

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

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

201904 次浏览

你可以使用 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;
}
$rand = rand(1,4);

或者,对于特定的数组:

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

从数组中得到一个随机数,如下所示:

$randomValue = $rand[array_rand($rand,1)];

PHP 为此提供了一个函数: array _ rand ()
Http://php.net/manual/en/function.array-rand.php

$ran = array(1,2,3,4);
$randomElement = $ran[array_rand($ran, 1)];

你也可以这样做:

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

有关联数组的时候就该这么做。

您可以使用 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)];

array_rand函数在大型数组上的分布似乎不均匀,不是每个数组项都同样有可能被选中。在数组上使用 洗牌,然后取第一个元素,就不存在这个问题:

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


// Random shuffle
shuffle($myArray);


// First element is random now
$randomValue = $myArray[0];
$value = $array[array_rand($array)];

我的答案是基于@ÓlafurWaage 的函数。我尝试使用它,但是在修改 return 对象时遇到了引用问题。我更新了他的函数,通过引用传递和返回。新的功能是:

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

有关更多上下文,请参阅我在 传递/返回对对象 + 更改对象的引用不起作用的问题

源自 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(),< a href = “ http://php.net/Manual/en/function. shuffle.php”rel = “ noReferrer”> 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;
}

以下是一些亮点:

  • 如果没有足够的项目可用,则引发异常
  • array_random($array, 1)返回一个由一个项组成的数组(# 19826)
  • 对项目数支持值“0”(# 20439)

您的选择是否有任何安全隐患?如果是,使用 random_int()array_keys()。(random_bytes()只是 PHP7,但有一个 PHP5填充料)。

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

使用 rand ()获取随机数以回显随机键

$ran = array(1,2,3,4);
echo $ran[rand(0,3)];

另一种通过翻转数组得到直接值的方法。

片段

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

返回键不是值。所以,我们将值转换为键。

注: PHP 键总是唯一的键,所以当数组被翻转时,重复的值作为键将被覆盖。

一行: $ran[rand(0, count($ran) - 1)]

这对于行内数组将非常有效。另外,我认为当包装在函数中时,事情会更加整洁和可重用。

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

用法:

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

在 PHP < 7.1.0上,array_rand()使用 rand(),因此您不会希望此函数用于与安全性或加密相关的任何内容。在 PHP 7.1.0 + 上,从 ABC1已经被别名为 mt_rand()开始就不用担心使用这个函数。

在我的例子中,我必须得到两个对象值,我分享了这个简单的解决方案。

$ran = array("a","b","c","d");
$ranval = array_map(function($i) use($ran){return $ran[$i];},array_rand($ran,2));

我需要一行短数组版本:

($array = [1, 2, 3, 4])[mt_rand(0, count($array) - 1)]

或者如果 array 是固定的:

[1, 2, 3, 4][mt_rand(0, 3]

获得 数组随机值的简单方法。

$color_array =["red","green","blue","light_orange"];
$color_array[rand(0,3)

现在每次你会得到不同的颜色从 数组

网上:

echo $array[array_rand($array,1)]

从数组中获取随机值。

function random($array)
{
/// Determine array is associative or not
$keys = array_keys($array);
$givenArrIsAssoc = array_keys($keys) !== $keys;


/// if array is not associative then return random element
if(!$givenArrIsAssoc){
return $array[array_rand($array)];
}


/// If array is associative then
$keys = array_rand($array, $number);
$results = [];
foreach ((array) $keys as $key) {
$results[] = $array[$key];
}
return $results;
}

mt_srand使用示例

如果一个人需要从一个文本中随机选择一行,但是基于某些东西一直都是一样的

$rows = array_map('trim', explode("\n", $text));
mt_srand($item_id);
$row = $rows[rand(0, count($rows ) - 1)];