2016-07-22 9 views
0

Ich bin mit PHP arbeiten, habe ich eine json Struktur, die so aussieht:Wie sollte ich diese JSON-Struktur durchsuchen?

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

    // etc 

I 5 Veranstaltungen in einer Reihe holen müssen, aber von einer bestimmten ID beginnen, so meine erste Idee zu Schleife jedes Ereignis von Anfang an und überprüfe, ob die ID der Offset ist, den ich suche, und wenn ich es dann bekomme, kann ich die nächsten 5 Ereignisse wiederholen.

Aber gibt es einen besseren Weg? Es könnte möglicherweise Hunderte von Ereignissen durchlaufen, also gibt es vielleicht einen besseren Weg dorthin? Danke

+0

Welche Sprache/welches Werkzeug verwenden Sie zum Parsen des JSON? – ggrr

+0

Nun, das ist keine einfache Möglichkeit, es abgesehen von der Schleife zu tun, es sei denn, Sie Ihre Daten umwandeln, um in der Datenbank zu speichern, setzen Sie Indizes auf ihnen; oder Sie partitionieren Ihre Daten, um eine weitere Tiefe zu haben, um jede Teilmenge wie "146877" -> 1468770000-1468779999 ... usw. oder ihre "ID" als Schlüssel zu speichern. – Anzel

+0

Entschuldigung - ich benutze PHP – tempse

Antwort

0

Zuerst würde ich einen Schlüssel: Wert Hash-Objekt (ein Nachschlageobjekt), wo der Schlüssel wäre die ID aus Ihrer Struktur, und der Wert wäre die Referenz auf das Ereignis. Daher iterieren Sie nur einmal über die Struktur und rufen dann alle Ereignisse aus der Suchstruktur ab, indem Sie nur mit ihren Schlüsseln auf sie zugreifen.

Sie könnten es auch sortieren (im Idealfall könnten Sie es bereits nach ID aus Ihrer Datenquelle sortiert bekommen) und dann einen binären Suchalgorithmus verwenden.

0

Da die id s nicht in numerischer Reihenfolge sind, können Sie keine binäre Suche verwenden, daher müssen Sie eine sequenzielle Suche verwenden. Hier ist ein Beispiel in JavaScript. Beachten Sie außerdem, dass dieser Code annimmt, dass die ID vorhanden ist und mindestens vier weitere Ereignisse im Array folgen.

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

Meiner Meinung nach, kann man nur mit einem Filter event.id >= theId, und dann prüfen, ob das gefilterte Array theId enthält eine Schleife über die Ereignisse nehmen. Wenn Sie es bekommen, können Sie dieses kleinere Array sortieren und die 5 Ereignisse nehmen.

Verwandte Themen