如何从数组中获得随机值

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

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

你也可以做:

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

当你有一个关联数组的时候,就是这样做的。

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

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

你可以使用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; } 
 $value = $array[array_rand($array)]; 

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

 $myArray = array(1, 2, 3, 4, 5); // Random shuffle shuffle($myArray); // First element is random now $randomValue = $myArray[0]; 

你可以使用array_rand函数从你的数组中select一个随机键,如下所示。

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

或者你可以使用rand和count函数来select一个随机索引。

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

来自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()

编辑:从那时起,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; } 

一些亮点:

  • 如果没有足够的项目可用,则抛出exception
  • array_random($array, 1)返回一个数组( #19826 )
  • 项目数量支持值“0”( #20439 )
 $rand = rand(1,4); 

或者,对于数组具体:

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

您的select是否有任何安全隐患? 如果是这样,使用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

使用rand()来获得随机数来回显随机密钥。 例如:0 – 3

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

我正在根据@ÓlafurWaage的函数来回答我的问题。 我试图使用它,但当我试图修改返回对象时遇到参考问题。 我更新了他的函数来传递并通过引用返回。 新function是:

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

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

纯粹的Mysql的另一种select:

 $result = mysql_query("select group_id from menu_groups group by group_id order by rand() limit 1"); $rand_group= mysql_fetch_row($result); $rand_group_id= $rand_group['group_id']; 

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

 $randomValue = array_rand($rand,1);