我有一个由N> 10个网址组成的数组。我想随机挑选其中的10个并将它们存储在另一个数组中。我怎样才能做到这一点? array_rand()
是可行的吗?如果是,那么如何确保输出数组中没有重复?每次添加新元素时我是否必须检查第二个数组?
// $firstArray is defined earlier
$secondArray = array();
array_push(array_rand($firstArray, 10));
不幸的是,这并没有奏效。我正在考虑为array_push()
使用for循环,但我很好奇array_rand()
是否可以为我做这件事。
感谢您的建议!
答案 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);
答案 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);