在一行中从php数组中获取任意数量的随机元素



我想从php中的数组中提取任意数量的随机元素。我看到array_rand()函数从数组中提取任意数量的随机。我在网上找到的所有例子都显示了使用密钥引用从数组中获得实际值,例如

$random_elements = array();
$random_keys = array_rand($source_array);
foreach ( $random_keys as $random_key ) {
  $random_elements[] = $source_array[$random_key];
}

这对我来说似乎很麻烦;我在想我可以做得更简洁一些。我需要一个函数来清除返回的随机元素,而不是密钥,或者一个可以将密钥转换为元素的函数,所以我可以做这样的事情:

$random_elements = keys_to_elements(array_rand($source_array, $number, $source_array));

但我在手册和谷歌搜索中都没有找到任何这样的功能。我是不是忽略了显而易见的东西?

使用array_flip怎么样?我突然想到:

$random_elements =  array_rand(array_flip($source_array), 3);

首先,我们翻转数组,使其值成为键,然后使用array_rand

另一种解决方案是打乱数组并从数组开始返回一个切片。

或者,如果你不想改变阵列,你可以这样做:

array_intersect_key($source_array, array_combine(
    array_rand($source_array, $number), range(1, $number)));

这有点麻烦,因为array_intersect可以处理键或值,但不能从一个数组中选择与另一个数组的值匹配的键。因此,我需要使用array_combine将这些值转换为另一个数组的键。

你可以做这样的事情,而不是测试!!!

array_walk(array_rand($array,2),create_function('&$value,$key','$value='$array[$value].';');

最新更新