生成固定范围不重复随机整数(JS&PHP)

5 篇文章 0 订阅
3 篇文章 0 订阅

个人主页:http://laichuanfeng.com/

JavaScript版本

function randomArr(/*最大随机数*/max, /*随机数个数*/amount,/*最小随机数*/min) {
    if (!min)
        min = 0;
    if (!amount)
        amount = max - min;
    var range=max-min;
    if (min > max || amount > range) {
        throw new Error("参数不正确。");
    } else {
        var arr = [],
            result=[];
        for (var i = 0; i < range; i++) {
            arr[i] = i + min;//生成固定范围的顺序数
        }
        for (var j = 0; j < (2 * max) ; j++) {
            var offset1 = Math.floor(Math.random() * 100);//生成固定范围的随机数组下标1
            var offset2 = Math.floor(Math.random() * 100);//生成固定范围的随机数组下标2
            offset1 = (offset1 > range - 1) ? offset1 - range - 1 : offset1;
            offset2 = (offset2 > range - 2) ? offset2 - range - 2 : offset2;
            //将上述两个随机生成的下标为索引交换两个元素,将整个数组乱序
            var temp = arr[offset1];
            arr[offset1] = arr[offset2];
            arr[offset2] = temp;
        }
        //从后面删除多余数组
        console.log(amount);
        console.log(range);
        if (amount != range) {
            for (var m = 0; m <amount; m++) {
                result[m]=arr[m]
            }
        }
        return result;
    }
}

PHP版本

/**
 * @param 最大随机数 $max
 * @param 随机数个数 $amount
 * @param 最小随机数 $min
 */
function randomArr( $max , $amount = "" , $min = 0 ) {
	$range = $max - $min;
	if ($amount == null)
		$amount = $range; // 设定$range默认值
	if ($min >= $max || $amount > $range) {
		echo "The arguments out of range!";
	} else {
		$arr = array ();
		for ($i = 0; $i < $range; $i++) {
			$arr[$i] = $i + $min; // 生成固定范围的顺序数
		}
		for ($j = 0; $j < (2 * $max); $j++) {
			$offset1 = mt_rand(0 , $range - 1); // 生成固定范围的随机数组下标1
			$offset2 = mt_rand(0 , $range - 1); // 生成固定范围的随机数组下标2
            // 将上述两个随机生成的下标为索引交换两个元素,将整个数组乱序
			$temp = $arr[$offset1];
			$arr[$offset1] = $arr[$offset2];
			$arr[$offset2] = $temp;
		}
		if ($range != $amount) {
			// 从后面开始删除多余的数组
			for ($m = 0; $m < $range - $amount; $m++) {
				$sumKey = count($arr) - 1;
				unset($arr[$sumKey]);
			}
		}
		return $arr;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值