0

この配列を持つ:

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) と交差するためにこのような大きな範囲を使用すべきではないことはわかっています。しかし、別の解決策が見つからないようです。また、範囲が大きくなる可能性があるため、このメソッドは最終的にドロップします。

4

2 に答える 2