有这个数组:
array (size=1)
24 =>
array (size=7)
'user_id' => int 24
'date_clicked' =>
array (size=3)
0 => int 1382867319
1 => int 1382867419
2 => int 1382940698
'ip' => string '127.0.0.1' (length=9)
'email' => string 'test' (length=8)
'name' => string 'test' (length=7)
'request' => string 'test content' (length=12)
'faked_clicks' =>
array (size=3)
0 => int 1382867319
1 => int 1382867419
2 => int 1382940698
这是我的实现,它根据单击的日期数组添加 faked_clicks 数组:
foreach($parsedUserClicks as $k => $v) {
foreach($v['date_clicked'] as $kk => $vv) {
$rangeHigh = range($vv, $vv+(60*60*24));
$checkHigh = array_intersect($v['date_clicked'], $rangeHigh );
if(count($checkHigh) >= 3) {
$parsedUserClicks[$k]['faked_clicks'] = $checkHigh;
}
}
}
问题是,通过使用 array_intersect ,只搜索 3 个时间戳需要相当长的时间。
我想要实现的是获得间隔为 1 天的所有 3 个日期。但是我的搜索太慢了(这个简单的搜索需要 5 秒)。我可以用于这种类型的搜索的任何算法?
PS:我知道我不应该使用这么大的范围来相交数组 (60*60*24) 。但我似乎找不到另一种解决方案。此外,范围可能会变大,因此这种方法最终会下降。