너 바보 아니야

连续轮询数组中的元素[s/m/d]

2017-12-27

##连续轮询数组中的元素[s/m/d]

实现在任何时间段连续轮询出数组中的元素——

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
   public $Randomnotify = array(
array('appid'=>'appid1','key'=>'key1'),
array('appid'=>'appid2','key'=>'key2'),
array('appid'=>'appid3','key'=>'key3'),
...
);
public function dataPollingInterval($list,$polling_time='1m',$polling_number=1) {
// 规划轮询间隔时间的参数:
$interval = false;
// 判断$polling_time 的类型是 秒、分、小时、天 中的哪1种。
$arg = array(
's'=>1, // 秒
'm'=>60, // 分= 60 sec
'h' =>3600, // 时= 3600 sec
'd' => 86400, // 天= 86400 sec
);

// 判断间隔时间的类型,并计算间隔时间
foreach ($arg as $k => $v) {
if (false!== stripos($polling_time,$k)) {
$interval = intval($polling_time)*$v;
break;
}
}
// 判断间隔时间
if(!is_int($interval)){
return false;
}
// 从今年开始的秒数
$this_year_begin_second = strtotime(date('Y-01-01 01:00:01', time()));

// 当前秒数 - 今年开始的秒数,得到今年到目前为止的秒数。
$polling_time = time()-$this_year_begin_second;

// 从今年到目前为止的秒数,计算得到当前轮数
$len = count($list); // 总长度
$start_index = intval($polling_time/$interval);
$start_index = $polling_number*$start_index%$len; // 轮排数量 * 轮数 , 取余 总数量。
$res = array();
// 将轮数 指向到数组的索引,然后从这个索引开始接着往下循环遍历。
for ($i=0; $i<$len; ++$i) {
$index=$i+$start_index; // 索引的变化是根据时间来变
if ($index>=$len) {
$index=$index-$len ;
}
$res[]=$list[$index]; // 存入结果
}
return $res[0];
}

使用支付宝打赏
使用微信打赏

欢迎点击上方按钮对我打赏,谢谢你给我吃糖果