Sorteren meerdere arrays op datum

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Hans De Ridder

Hans De Ridder

26/01/2019 13:25:17
Quote Anchor link
Ik gebruik een aantal arrays op diverse plekken op de website.
Nu wil ik deze gegevens samenvoegen tbv Googlemaps API.
Het is een alternatieve oplossing voor clustering.
Alles werkt prima.
Alleen krijg ik een opsomming van meerdere activiteiten gedurende
een periode van 2 weken op dezelfde locatie niet netjes gesorteerd op datum.
De googlemaps Api werkt met javascript.
De PHP waarden worden via 'implode' toegevoegd aan javascript.
Wie kan me op weg helpen?

Een voorbeeld staat op:

https://www.pctraverse.nl/Project/geoB-werkCC.php

Het kan gaan aan de PHP kant om:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
$datumA = array("1548892800","1548892800","1548806400","1548806400","1548892800","1549065600","1549065600","1549065600");
$datumB = array("31-01-2019","31-01-2019","30-01-2019","30-01-2019","31-01-2019","02-02-2019","02-02-2019","28-01-2019");
$destLat = array("53.0966489","52.7488209","53.22088669999999","53.0966489","52.7488209","53.0966489","53.0966489","53.0966489");
$destLong = array("6.103173999999967","6.8742012999999815","6.577688599999988","6.103173999999967","6.8742012999999815","6.103173999999967","6.103173999999967","6.103173999999967");
$naamB = array("hans thuis","John buiten","Alie buiten","hans Thuis","John buiten","hans thuis","Hans thuis","hans thuis");
$adresA = array("Kennedylaan 2","Emmen Zuid","Groningen","","Drachten","Emmen zuid","Kennedylaan 2","Kennedylaan 2","Kennedylaan 2");
$adresB = array("Drachten","Emmen","UMCG","Drachten","Emmen","Drachten","Drachten","Drachten");
$adresC = array("Nederland","Nederland","Groningen","Nederland","Nederland","Nederland","Nederland","Nederland");
$fileB = array("3594917aa2c61071c2f8ed8de16417e80da3f605.jpg","43ede206d4e765b78a57fb680332eb3898360e03.jpg","670ad174d83f04df7acdbd341775ff8c5ea9f012.jpg","698919805a97a68005ce6407510037e7e38b1a53.jpg","7f38f63f385630022087b5e7ec43774a2310c66d.jpg","828d46525300cc185719387c1cee8d3534b43b6a.jpg","99110ae2a73b863cdfc1991074c79db27c008982.jpg","f57492f09c5224b4cd9847fba0afb8da04b6c752.jpg");
$refA = array("0","1","2","0","1","0","0","0");
$refB = array("7","4","2","7","4","7","7","7");
 
PHP hulp

PHP hulp

28/03/2024 19:27:45
 
Thomas van den Heuvel

Thomas van den Heuvel

26/01/2019 16:49:12
Quote Anchor link
Ennn... Wat voer je aan Google Maps? Wat verwacht Google Maps qua formaat? Wat verwacht jij dat er gebeurt?
 
Rob Doemaarwat

Rob Doemaarwat

26/01/2019 16:50:05
Quote Anchor link
Ik heb het niet gecontroleerd, maar ik ga d'r vanuit dat al die arrays even lang zijn (en dat index 0 van alle arrays dus steeds bij elkaar horen). Tevens ga ik er vanuit dat de integer in $datumA een timestamp is van de datum in $datumB. In dat geval kun je array_multisort gebruiken (en dan $datumA als eerste parameter).
 
Hans De Ridder

Hans De Ridder

26/01/2019 17:05:16
Quote Anchor link
@thomas
Alles werkt zoals ik het verwacht. Dus de aanvoer is wel juist.
(Zie voorbeeld). Maar ik wil sorteren op datum.
Zodat de volgorde van de info start bij laagste datum en eindigt bij de hoogste.
Dat kan door de sortering in PHP zo uit te voeren.

@Rob
Je gedachten kloppen. $datumA is de timestamp.
En de volgorde van de Arrays is inderdaad ook hetzelfde, en horen bij elkaar.
Heb array_multisort wel geprobeerd, maar kom daar niet uit.
 
Thomas van den Heuvel

Thomas van den Heuvel

26/01/2019 17:23:50
Quote Anchor link
Dit is dus een array sorteer probleem waarbij je meerdere arrays in dezelfde volgorde wilt sorteren op grond van een of meer criteria zodat je deze (alle arrays) in de goede volgorde kunt voeren aan Google Maps?

Dat heeft dan toch niets met Google Maps te maken? :/

Stap 0 van probleemoplossing is afbakening van het zoek/oplossingsterrein. Dingen die er niets mee te maken hebben compliceren een vraagstuk alleen maar.
 
Hans De Ridder

Hans De Ridder

26/01/2019 17:32:04
Quote Anchor link
@Thomas
In zoverre heeft dit met de googlemaps te maken,
dat de info die verschijnt als je op een marker klikt,
(in voorbeeld bij drachten 5 activiteiten) de info wel klopt
die van PHP is overgenomen.
Maar het is niet gesorteerd op datum.
 
Thomas van den Heuvel

Thomas van den Heuvel

26/01/2019 18:14:17
Quote Anchor link
Maar... De 5 activiteiten in Drachten staan toch al niet op volgorde? Als je wilt dat iets in de goede volgorde uit Google Maps rolt zal het toch ook eerst in de goede volgorde ingevuld moeten zijn? Je draait met een for-lus toch ergens gewoon de activiteiten af die daar plaatsvinden, of mis ik nu iets?
Gewijzigd op 26/01/2019 18:14:44 door Thomas van den Heuvel
 
Hans De Ridder

Hans De Ridder

26/01/2019 18:23:22
Quote Anchor link
@Thomas
De info wordt in de volgorde van PHP arrays gebruikt in googlemaps.
Dus als ik in PHP kan sorteren op datum, dan wordt dit ook zo geplaatst in googlemaps.
Je kunt 2 manieren bedenken om te sorteren.
De ene is aan de PHP kant, de andere is aan de javascript kant.
Ik heb geprobeerd om de DIV's te sorteren aan de javascript kant.
Maar hij accepteert de de 'childs' niet.
En bovendien ook makkelijk als de PHP multiarray zou werken.
Maar ik zal nog eens wat checken...
 
Rob Doemaarwat

Rob Doemaarwat

26/01/2019 19:40:47
Quote Anchor link
Weet je zeker dat die arrays "op index" bij elkaar horen? Van $datumA hebben de laatste 3 entries allemaal 1549065600 (= 2019-02-02). In $arrayB staat voor de laatste entry echter een andere datum.

Daarnaast heeft $adresA 9 entries, en de rest 8. dat is de reden dat array_multisort() niet werkt (retourneert false - alle arrays moeten even lang zijn).

Als je die d'r af haalt werkt het wel (op timestamp):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

$datumA
= array("1548892800","1548892800","1548806400","1548806400","1548892800","1549065600","1549065600","1549065600");
$datumB = array("31-01-2019","31-01-2019","30-01-2019","30-01-2019","31-01-2019","02-02-2019","02-02-2019","28-01-2019");
$destLat = array("53.0966489","52.7488209","53.22088669999999","53.0966489","52.7488209","53.0966489","53.0966489","53.0966489");
$destLong = array("6.103173999999967","6.8742012999999815","6.577688599999988","6.103173999999967","6.8742012999999815","6.103173999999967","6.103173999999967","6.103173999999967");
$naamB = array("hans thuis","John buiten","Alie buiten","hans Thuis","John buiten","hans thuis","Hans thuis","hans thuis");
$adresA = array("Kennedylaan 2","Emmen Zuid","Groningen","","Drachten","Emmen zuid","Kennedylaan 2","Kennedylaan 2");
$adresB = array("Drachten","Emmen","UMCG","Drachten","Emmen","Drachten","Drachten","Drachten");
$adresC = array("Nederland","Nederland","Groningen","Nederland","Nederland","Nederland","Nederland","Nederland");
$fileB = array("3594917aa2c61071c2f8ed8de16417e80da3f605.jpg","43ede206d4e765b78a57fb680332eb3898360e03.jpg","670ad174d83f04df7acdbd341775ff8c5ea9f012.jpg","698919805a97a68005ce6407510037e7e38b1a53.jpg","7f38f63f385630022087b5e7ec43774a2310c66d.jpg","828d46525300cc185719387c1cee8d3534b43b6a.jpg","99110ae2a73b863cdfc1991074c79db27c008982.jpg","f57492f09c5224b4cd9847fba0afb8da04b6c752.jpg");
$refA = array("0","1","2","0","1","0","0","0");
$refB = array("7","4","2","7","4","7","7","7");

print_r([$datumA,$datumB,$destLat,$destLong,$naamB,$adresA,$adresB,$adresC,$fileB,$refA,$refB]);

var_dump(array_multisort($datumA,$datumB,$destLat,$destLong,$naamB,$adresA,$adresB,$adresC,$fileB,$refA,$refB));

print_r([$datumA,$datumB,$destLat,$destLong,$naamB,$adresA,$adresB,$adresC,$fileB,$refA,$refB]);

?>
Gewijzigd op 26/01/2019 19:41:16 door Rob Doemaarwat
 
Thomas van den Heuvel

Thomas van den Heuvel

26/01/2019 19:44:45
Quote Anchor link
En misschien is het ook interessant om te weten waarom je die informatie niet op voorhand combineert - waarom moeten dit alle aparte arrays zijn?

Daarbij - deze informatie komt op den duur waarschijnlijk uit een database? Dan heb je dit sorteerprobleem sowieso niet (en alles is al gegroepeerd d.m.v. het record), omdat je alles op volgorde (ORDER BY) uit je database trekt?
 
Hans De Ridder

Hans De Ridder

26/01/2019 20:39:32
Quote Anchor link
@Rob
Bij adresA heb je nu maar 7 entries (waren er volgens jou 9, waar het 8 moet zijn)
De laaste gegevens zijn inderdaad hetzelfde.
Dat kan voorkomen als op adres met meerdere zalen op dezelfde dag iets wordt georganiseerd.

@Thomas
Dat er losse arrays zijn toegepast komt omdat de maps deel uit maken van een groter geheel.
Denk bijv. aan pagina met uitsluitend persoonlijke gegevens. Er zijn ook pagina's waar uitsluitend gegevens nodig zijn van activiteit (flyers). Of nieuwsbrief, youtubes, enz.
Het was ook niet ingecalculeerd om al deze gegevens te gebruiken in googlemaps. Is beetje creativiteit geweest om problemen mbt clustering te voorkomen
 
Rob Doemaarwat

Rob Doemaarwat

26/01/2019 21:16:18
Quote Anchor link
Hans De Ridder op 26/01/2019 20:39:32:
@Rob
Bij adresA heb je nu maar 7 entries (waren er volgens jou 9, waar het 8 moet zijn)

D'r zit een lege entry tussen "Groningen" en "Drachten" (en daarmee zijn het er toch echt 8 - leeg of niet, dat maakt niet uit voor de telling). Zie je die over het hoofd / hoort die er niet in?

Maarrr:
- Klopt het dat de datums in $datumB toch niet helemaal bij de timestamps in $datumA horen?
- Is hiermee wel je probleem opgelost?

En wat Thomas zegt: kun je deze data niet handiger groeperen? Op deze manier data bij elkaar houden (op index in verschillende arrays) gaat je op een gegeven moment opbreken (de indexen horen niet meer bij elkaar, of er zit dus een entry teveel/weinig in).
Gewijzigd op 27/01/2019 10:40:09 door Rob Doemaarwat
 
Hans De Ridder

Hans De Ridder

26/01/2019 21:21:33
Quote Anchor link
@Rob
Ik ga het nog eens bestuderen.
Ik heb wel gemerkt bij de loop om de info per marker aan te geven, ergens een dubbele 0 voorkomt.
Ik kon dat nog niet achterhalen.
Maar dat zou de lege plek dan wel eens kunnen zijn.
Ik kom erop terug. Zal wel maandag worden waarschijnlijk.
 
Hans De Ridder

Hans De Ridder

28/01/2019 20:24:22
Quote Anchor link
De problemen aan de PHP kant zijn opgelost.
Er waren wat problemen met Numeric en Alphanumeric.
Ook was de array_multisort te vroeg geplaatst.
Kwam nog een loop na.

Nu aan de Javascript kant nog een sorteerprobleem oplossen per marker.

Bedankt voor jullie hulp.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.