从PHP中的另一个数组中获取随机值数组的最简单方法
我想知道在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个随机值。
$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_切片,以获得您想要的值的数量。您确定没有获得重复的值吗?我将检查新数组中是否已经存在该值。