在PHP中将随机数组元素推送到另一个数组中

时间:2013-11-12 11:39:40

标签: php arrays

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

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

不幸的是,这并没有奏效。我正在考虑为array_push()使用for循环,但我很好奇array_rand()是否可以为我做这件事。

感谢您的建议!

6 个答案:

答案 0 :(得分:3)

array_rand返回键,所以

$randKeys = array_rand($firstArray, 10);
foreach($randKeys as $key)
$secondArray[] = $firstArray[$key]

答案 1 :(得分:2)

这可以在没有array_rand()的情况下完成。使用shuffle()随机播放数组元素,然后使用array_slice()获取前10个项目:

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

Demo!

答案 2 :(得分:2)

正如人们所说,array_rand()中有第二个论点可以选择你想要的随机元素数量,但请记住阅读Manual

//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()来反转密钥=&gt;在选择之前重视位置,无需再次循环它们。

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

答案 3 :(得分: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);

答案 4 :(得分: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);
}

答案 5 :(得分:0)

这个简单的

$rand_keys = array_rand($input, 10);
print_r($rand_keys);