Algorithmus zu kombinieren / verbinden von Zeiträumen
Ich versuche den besten Weg finden, wie Sie merge-Datumsbereiche in einem Datenbank-Datensatz (array-element).
Das sind die Daten die ich habe:
Array
(
[0] => Array
(
[id] => 18298
[start_date] => 2011-07-09
[end_date] => 2011-10-01
)
[1] => Array
(
[id] => 18297
[start_date] => 2011-06-01
[end_date] => 2011-06-30
)
[2] => Array
(
[id] => 17113
[start_date] => 2011-03-31
[end_date] => 2011-05-31
)
[3] => Array
(
[id] => 20555
[start_date] => 2011-01-03
[end_date] => 2011-03-31
)
)
Und nachdem wir Sie kombinieren, array (oder Datenbank) sollte wie folgt Aussehen:
Array
(
[0] => Array
(
[merged_ids] => 18298
[start_date] => 2011-07-09
[end_date] => 2011-10-01
)
[1] => Array
(
[merged_ids] => 18297, 17113, 20555
[start_date] => 2011-01-03
[end_date] => 2011-06-30
)
)
Gibt es eine Algorithmus zum Durchlaufen aller Elemente/- Bereiche und kombinieren Sie Sie? Welcher Weg ist besser/einfacher zu tun - durch die Datenbank (MYSQL) oder Kodierung (PHP)?
Jede Beratung wird sehr geschätzt.
Dank!
UPDATE: Sorry, ich habe nicht genug info: wir führen eine kontinuierliche und überlappende Zeiträume.
- Wie bestimmen Sie, welche Daten zusammengeführt werden sollen? Ist es, wenn Sie kontinuierlich?
- ist es garantiert, dass die ursprünglichen Zeiträume nicht überlappen?
- Sind Sie nicht überlappen Beispiel Daten, die er gab?
20555
und17113
überlappen. Ebenfalls funktioniert dasmerged_ids
Eigenschaft haben, jede Sorte, damit Ihre Elemente? - wir sollten uns Zusammenführen, kontinuierliche und überlappende Zeiträume
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sortieren nach Startdatum.
Dann Durchlaufen und prüfen, ob das nächste Element das start-Datum vor oder direkt nach dem aktuellen Ende-Datum. Wenn es ist, dann fahren Sie die nächste in der aktuellen. Fahren Sie dann Fort.
Habe ich geschrieben Funktion, die verbindet/verschmilzt Liste der Bereiche. Es ist in Python geschrieben, aber es sollte einfach zu umschreiben, es in PHP. Hier ist der vollständige code: https://gist.github.com/barszczmm/8447665 und hier ist der vereinfachte Algorithmus (immer noch in Python):
Die Umsetzung ist wie:
Meine Methode generieren, die eine zusammengeführte array, wobei durch überlappen oder aufeinander folgende Termine werden zusammen gruppiert und der Gruppe die ids sind, werden als string mit Komma-Leerzeichen-separierte Werte.
Ich bin mit dem modernen "Raumschiff-operator" (
<=>
) fürusort()
s Vergleich. Wenn Ihr code ausgeführt wird, auf eine version unter php7, die Sie verwenden können:Siehe inline-Kommentare, die für die Schritt-für-Schritt-Erklärung.
Code: (Demo)
Ausgabe: