如何从数组中获得随机值
我有一个名为$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);