在PHP

时间:2016-04-25 21:54:37

标签: php arrays random

我想知道在PHP中从数组中获取随机值数组的最简单/最简洁的方法是什么。获取一组随机密钥很容易,但似乎没有函数可以立即得到值数组

我发现最简单的方法是:

$tokens = ['foo', 'bar', '...'];
$randomValues = array_map(function($k) use ($tokens) {
    return $tokens[$k];
}, array_rand($tokens, rand(7, 20)))

这将从$tokens变量返回7-20个随机值。然而,这看起来很丑陋,一眼就看不清楚它的作用。

2 个答案:

答案 0 :(得分:2)

如果您不想修改$tokens数组,可以翻转随机生成的数组键,然后使用array_intersect_key。我认为它比array_map方法更具可读性,但我认为这是相当主观的。

$randomKeys = array_flip(array_rand($tokens, rand(7, 20)));
$randomValues = array_intersect_key($tokens, $randomKeys);

如果你不在乎是否修改了$tokens,那么shuffle \ slice方法似乎非常简单。

答案 1 :(得分:1)

只需随机播放然后切片随机数量的元素:

shuffle($tokens);
$result = array_slice($tokens, 0, rand(7, 20));

如果您不想修改数组,那么显然只需指定另一个变量并使用它:

$temp = $tokens;