php数组随机不重复去多个值,php生成不重复随机数、数组的4种方法分享_php技巧...

下面写几种生成不重复随机数的方法,直接上代码吧

代码如下:

define('RANDOM_MAX', 100);

define('COUNT', 10);

echo 'max random num: '.RANDOM_MAX, ' ;result count:'.COUNT, '

';

invoke_entry('rand1');

invoke_entry('rand2');

invoke_entry('rand3');

invoke_entry('rand4');

function invoke_entry($func_name) {

$time = new time();

$time->time_start();

call_user_func($func_name);

echo $func_name.' time spend: ', $time->time_spend();

echo '

';

}

function rand1() {

$numbers = range (1, RANDOM_MAX);

shuffle($numbers); //随机打乱数组

$result = array_slice($numbers, 1, COUNT);

return $result;

}

function rand2() {

$result = array();

while(count($result)< COUNT) {

$result[] = mt_rand(1, RANDOM_MAX); //mt_rand()是比rand()更好更快的随机函数

$result = array_unique($result); //删除数组中重复的元素

}

return $result;

}

function rand3() {

$result = array();

while(count($result) < COUNT) {

$_tmp = mt_rand(1, RANDOM_MAX);

if(!in_array($_tmp, $result)) { //当数组中不存在相同的元素时,才允许插入

$result[] = $_tmp;

}

}

return $result;

}

function rand4() {

$result = array();

while (count($result) < COUNT) {

$result[] = mt_rand(1, RANDOM_MAX);

$result = array_flip(array_flip($result)); //array_flip将数组的key和value交换

}

return $result;

}

class time {

private $_start;

public function time_start() {

$this->_start = $this->microtime_float();

}

public function time_spend() {

return $this->microtime_float() - $this->_start;

}

private function microtime_float() {

list($usec, $sec) = explode(" ", microtime());

return ((float)$usec + (float)$sec);

}

}

?>

说一下第四种方法,就是翻翻法了,利用array_flip()将数组的键和值翻转,利用php数组特性,重复的键会覆盖,此时再翻转一次,就相同于去掉了重复的值。

以上几种方法只是简单的例子,有的方法适用范围有限。

在看看几种方法的效率:

201533093959624.png?201523094010

201533094019300.png?201523094027

用array_unique()在数组较大时性能比较差,当然shuffle()也会受此影响。

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值