/*
* 作者:Zjmainstay
* 1-9999取365个随机,尽可能平衡取值
* @author Zjmainstay
* @website http://zjmainstay.cn
*
*/
$arr = range(1, 9999);
$randNum = 365;
$randArr = array();
//1 && 9999
$minNum = array_shift($arr);
$maxNum = array_pop($arr);
$randArr[$minNum] = true;
$randArr[$maxNum] = true;
//反转,数值做key
$arr = array_flip($arr);
//平衡
$avg = 2;
$halfBase = count($arr) / $avg;
//剩余个数取出
for($i = count($randArr); $i < $randNum; $i++) {
$rand = rand(1, $halfBase);
if($i % $avg == 0) {
$rand += $halfBase;
}
//碰撞,分支从左到右取不碰撞的第一个
if(isset($randArr[$rand])) {
if($rand < $halfBase) { //左支
for($j = $minNum; $j < $halfBase; $j++) {
if(!isset($randArr[$j])) {
$rand = $j;
unset($randArr[$j]); //Delete it
break; //Got it and break
}
}
} else { //右支
for($j = $halfBase; $j < $maxNum; $j++) {
if(!isset($randArr[$j])) {
$rand = $j;
unset($randArr[$j]); //Delete it
break; //Got it and break
}
}
}
}
$randArr[$rand] = true;
}
//取出随机数并排序
$randArr = array_keys($randArr);
sort($randArr);
echo '
';
print_r($randArr);
//End_php