2016-07-22 15 views
0

私はPHPで働いている、私はそのように見えるのJSON構造を有する:私の最初のアイデアはループにあるのでこのjson構造をどのように検索する必要がありますか?

{ 
    "events": [ 
    { 
    "timestamp": 1468774519, 
    "id": 75964, 
    }, 
    { 
    "timestamp": 1468771410, 
    "id": 24891, 
    }, 

    // etc 

を、私は、行の5つのイベントを取得する必要がありますが、ある特定のIDから始まります最初からすべてのイベントをチェックし、idが私が探しているオフセットであるかどうかを確認してから、次の5つのイベントをループすることができます。

しかし、そうするための良い方法はありますか?何百ものイベントをループする可能性があるので、そこに行く良い方法があるかもしれません。キーはあなたの構造からのid値になるハッシュオブジェクト(検索対象)、および値は、イベントへの参照のようになります。おかげで

+0

どの言語/ツールを使用してjsonを解析していますか? – ggrr

+0

これはループから離れて簡単な方法ではありません。データベースに格納するようにデータを再構築しない限り、インデックスを置く必要はありません。またはデータを分割して、 "146877" - > 1468770000-1468779999 ...などの各サブセットを保持するか、 "id"をキーとして使用するようにデータを分割します。 – Anzel

+0

申し訳ありません - PHPを使用しています – tempse

答えて

0

まず私がキーになるだろう。その結果、構造体を一度しか反復せずに、キーでアクセスするだけで、ルックアップ構造からすべてのイベントを取得できます。

あなたは同様にそれを並べ替えることができ(理想的に、あなたはそれがすでにデータのソースからidでソート得ることができる)、その後、バイナリサーチアルゴリズムを使用します。

0

id sが数字順になっていないので、あなたはバイナリ検索を使用することはできませんので、あなたは順次検索を使用する必要があります。 JavaScriptの例を以下に示します。また、このコードでは、IDが存在し、その配列の後に少なくとも4つ以上のイベントがあることを前提としています。私の意見で

var index = 0; 
var id = 12345; // for example 
var json = {...}; // whatever that object was 
while(json.events[index].id!=id) { 
    index++; 
} 

// found the one, do something with the next five 
for(var i=0; i<5; i++) { 
    var event = json.events[index+i]; 
    // do something 
} 
0

、あなただけのフィルターevent.id >= theIdとイベントの上に一つのループを取り、次いで濾過配列がtheIdが含まれているかどうかを確認することができます。もしあなたがそれを取得すれば、この小さな配列をソートして5つのイベントを取ることができます。

関連する問題