欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

浅谈php随机不重复数的两种算法

程序员文章站 2024-01-11 10:10:04
...

先引入别人的一个秒表计时类(counttime.class.php): 1.先看第一个例子(大数中取少数): 1 ? 2 /* 3 @描述: Stopwatch这个类用户获取脚本执行时间 4 @作者: Klesti Hoxha klesti@gmail.com 5 */ 6 7 class Stopwatch { 8 private $start ; 9 private $en

先引入别人的一个秒表计时类(counttime.class.php):

1.先看第一个例子(大数中取少数):

 1 
 2 /*
 3 @描述: Stopwatch这个类用户获取脚本执行时间
 4 @作者: Klesti Hoxha  5 */
 6 
 7 class Stopwatch {
 8 private $start;
 9 private $end;
10 private $markup_start = array();
11 private $markup_end = array();
12 
13 function __construct($markup=false) {
14 $this->start($markup);
15 }
16 
17 public function start($markup=false) {
18 if (!$markup) {
19 $this->start = $this->getmicrotime();
20 } else {
21 $this->markup_start[$markup] = $this->getmicrotime();
22 }
23 }
24 
25 public function stop($markup=false) {
26 if (!$markup) {
27 $this->end = $this->getmicrotime();
28 } else {
29 $this->markup_end[$markup] = $this->getmicrotime();
30 }
31 return $this->getDuration($markup);
32 }
33 
34 public function getDuration($markup=false) {
35     if (!$markup)
36      {
37         return number_format($this->end-$this->start,4);
38     } else {
39         return number_format($this->markup_end[$markup]-$this->markup_start[$markup],4);
40     }
41 }
42 
43 public function reset($markup) {
44 if (!$markup) {
45 $this->start = 0;
46 $this->end = 0;
47 $this->markup_start = array();
48 $this->markup_end = array();
49 } else {
50 $this->markup_start[$markup] = 0;
51 $this->markup_end[$markup] = 0;
52 }
53 }
54 
55 private function getmicrotime(){
56 list($usec, $sec) = explode(" ",microtime());
57 return ((float)$usec + (float)$sec);
58 }
59 
60 }
61 ?>

测试的两种方法如下:

 1
 2 php
 3 require "counttime.class.php";//把类文件引用进来,根据你的实际情况来确定路径,这里是在同级目录
 4 $s = new Stopwatch();
 5 
 6 $s->start("div1");
 7 //range 是将1到100 列成一个数组
 8 $numbers = range (1,1000000);
 9 //shuffle 将数组顺序随即打乱
10 shuffle ($numbers);
11 //array_slice 取该数组中的某一段
12 $no=30;
13 $result = array_slice($numbers,0,$no);
14 for ($i=0;$i$no