0

我有一个由 N>10 个 URL 组成的数组。我想随机选择其中的 10 个并将它们存储在另一个数组中。我怎样才能做到这一点?是array_rand()要走的路吗?如果是,那么我如何确保输出数组中没有重复?每次添加新元素是否存在时,我是否必须检查第二个数组?

// $firstArray is defined earlier
$secondArray = array();
array_push(array_rand($firstArray, 10));

不幸的是,这不起作用。我正在考虑使用 for 循环,array_push()但我只是好奇是否array_rand()可以为我这样做。

谢谢你的建议!

4

6 回答 6

3

array_rand 返回键所以

$randKeys = array_rand($firstArray, 10);
foreach($randKeys as $key)
$secondArray[] = $firstArray[$key]
于 2013-11-12T11:45:56.800 回答
2

这可以在没有array_rand(). 用于shuffle()打乱数组元素,然后用于array_slice()获取前 10 个项目:

$secondArray = array();
shuffle($firstArray);
$secondArray = array_slice($firstArray, 0, 10);

演示!

于 2013-11-12T11:52:59.197 回答
2

正如人们所说,有第二个参数array_rand()来选择你想要多少随机元素,永远记得阅读手册

//Lets pick 10 mammals
$mammals = array('dog', 'cat', 'pig', 'horse', 'bat', 'mouse', 'platypus', 'bear', 'donkey', 'deer', 'hog', 'duck');
$ten = array_rand(array_flip($mammals), 10);

//If what yo u really wanted is to append them to another array, let's say "animals":
$animals = array('fish', 'crab', 'whale', 'eagle');
$animals = array_merge($animals, array_rand(array_flip($mammals), 10));

解释 array_rand()会返回给你的键,所以我们可以array_flip()在这里使用它们来反转键 => 值的位置,然后再选择它们,无需再次循环它们。

并且使用array_merge()我们将它们合并在一起,无需循环遍历十个随机元素来逐个添加它们,除非......您想要特定的顺序或其他逻辑。

于 2013-11-12T11:57:20.327 回答
1

不是非常优化的解决方案,但对于少量数据,它可能适合:

$firstArray = array(1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9);
$secondArray = array();

$tmp = array_unique($firstArray);
shuffle($tmp);
$secondArray += array_slice($tmp,0, 10);
于 2013-11-12T11:51:59.600 回答
1

如果您在示例代码中使用 array_push,则第二个数组中的最后一个索引将包含返回的 10 个索引

例如。

$stack = array('a', 'b', 'c');
array_push($stack, array('d', 'e', 'f'));
print_r($stack);

Array (
  [0] => a
  [1] => b
  [2] => c
  [3] => Array (
     [0] => d
     [1] => e
     [2] => f
  )
)

在这种情况下,我会使用一段时间,一次只选择一个值。就像是:

$stack = array();
while(count($stack)<10){
    $item = array_rand($collection_of_urls);
    if(!in_array($item)
        array_push($stack, $item);
}
于 2013-11-12T11:56:13.247 回答
0

这个简单

$rand_keys = array_rand($input, 10);
print_r($rand_keys);
于 2013-11-12T11:49:16.873 回答