从PHP中的另一个数组中获取随机值数组的最简单方法

从PHP中的另一个数组中获取随机值数组的最简单方法,php,arrays,random,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个随机值。

我想知道在PHP中从数组中获取随机值数组的最简单/最干净的方法是什么。获取一个随机键数组很容易,但似乎没有函数可以直接获取值数组

我发现最简单的方法是:

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

这将从
$tokens
变量返回7-20个随机值。但是,这看起来很难看,乍一看它的作用非常不清楚。

只需洗牌,然后将任意数量的元素切片:

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

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

$temp = $tokens;

只需洗牌,然后对任意数量的元素进行切片:

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

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

$temp = $tokens;

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

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

如果您不关心
$tokens
是否被修改,则shuffle\slice方法似乎非常简单。

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

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

如果您不关心是否修改了
$tokens
,则shuffle\slice方法似乎非常简单。

因为您的代码实际上正在工作,所以这看起来像是一个to-to-shuffle,然后使用array\u-slice来获得您想要的值的数目。您确定没有得到重复的值吗?我会检查新数组中是否已经存在该值。因为您的代码实际上正在工作,所以这看起来像是一个要洗牌的to,然后是array_切片,以获得您想要的值的数量。您确定没有获得重复的值吗?我将检查新数组中是否已经存在该值。