<?php
/*
* 从100组重复的数中选50组随机组合,最后移除数组中重复的值,输出
*/ $hund = array('00','01','10','02','20','03','30','04','40','05','50','06','60','07','70','08','80','09','90','11','12','21','13','31','14','41','15','51','16','61','17','71','18','81','19','91','22','23','32','24','42','25','52','26','62','27','72','28','82','29','92','33','34','43','35','53','36','63','37','73','38','83','39','93','44','45','54','46','64','47','74','48','84','49','94','55','56','65','57','75','58','85','59','95','66','67','76','68','86','69','96','77','78','87','79','97','88','89','98','99');
$all_num = array();
for($i = 0; $i <1000;$i ++) //把1000改成任意大于500的数,最后输出的结果都只有476个元素
{ $arr = array();
for($n = 0; $n < 50; )
{
$rand = $hund[rand(0,99)];
if(in_array($rand,$arr))//判断是否有重复的值
{
$num = '';
continue;
}else{
$n ++;
$arr[] = $rand;
}
}
foreach($arr as $val)
{
$num .= ' '.$val.' '; 将五十组输组合成一个字符串
} $arr = array();
$all_num[] = $num; //将$num赋给数组$all_num[]
$rand = '';
$num = '';
}
$result = array_unique($all_num);//去除重复的值
print_r($result);//输出结果,为什么每次都只有476个元素??????
?>
/*
* 从100组重复的数中选50组随机组合,最后移除数组中重复的值,输出
*/ $hund = array('00','01','10','02','20','03','30','04','40','05','50','06','60','07','70','08','80','09','90','11','12','21','13','31','14','41','15','51','16','61','17','71','18','81','19','91','22','23','32','24','42','25','52','26','62','27','72','28','82','29','92','33','34','43','35','53','36','63','37','73','38','83','39','93','44','45','54','46','64','47','74','48','84','49','94','55','56','65','57','75','58','85','59','95','66','67','76','68','86','69','96','77','78','87','79','97','88','89','98','99');
$all_num = array();
for($i = 0; $i <1000;$i ++) //把1000改成任意大于500的数,最后输出的结果都只有476个元素
{ $arr = array();
for($n = 0; $n < 50; )
{
$rand = $hund[rand(0,99)];
if(in_array($rand,$arr))//判断是否有重复的值
{
$num = '';
continue;
}else{
$n ++;
$arr[] = $rand;
}
}
foreach($arr as $val)
{
$num .= ' '.$val.' '; 将五十组输组合成一个字符串
} $arr = array();
$all_num[] = $num; //将$num赋给数组$all_num[]
$rand = '';
$num = '';
}
$result = array_unique($all_num);//去除重复的值
print_r($result);//输出结果,为什么每次都只有476个元素??????
?>
改为:
for($n = 0; $n < 50; $n++)
下面sele中的$n++注释掉
if(!in_array($num, $all_num)){
$i ++;
$all_num[] = $num;
}
估计是 rand 函数的问题,虽说已经不需要播种了,但至少还是表现出规律性改成这样就是 1000 个元素了$all_num = array();
for($i = 0; $i <1000;$i ++) {
shuffle($hund);
$arr = array_slice($hund, 50);
$all_num[] = join(' ' , $arr);
}$result = array_unique($all_num);//去除重复的值
echo count($result);
// print_r($result);//输出结果,为什么每次都只有476个元素??????
for($i = 0; $i < 10000; $i ++)$hund[] = $i;//一定范围内,这个数越大,下面速度越快,因为出现重复的次数变小了,省去了重复再重复的可能了for($i = 0; $i < 1000;){
$arr = array();
for($n = 0; $n < 50; $n ++){
$rand = $hund[rand(0, 9999)];
while(in_array($rand, $arr))$rand = $hund[rand(0, 9999)];
$arr[] = $rand;
} $num = '';
foreach($arr as $val)$num .= ' '.$val.' '; if(!in_array($num, $all_num)){
$i ++;
$all_num[] = $num;
}
}
echo count(array_unique($all_num)).'<br>';
echo '<pre>';print_r($all_num);
这样好像是只是把数组$hund打乱了,然后截取五十个 放到数组里面,比较的时候去除重复元素的时候,比如1 2 3 和 3 2 1 会当做不同元素,这样就不符合要求了,我没说清楚,要求是每组数中至少有一个不相同的数。