Sorteren meerdere arrays op datum
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)
1
2
3
4
5
6
7
8
9
10
11
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");
$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");
Ennn... Wat voer je aan Google Maps? Wat verwacht Google Maps qua formaat? Wat verwacht jij dat er gebeurt?
array_multisort gebruiken (en dan $datumA als eerste parameter).
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 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.
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.
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.
Gewijzigd op 26/01/2019 18:14:44 door Thomas van den Heuvel
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...
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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]);
?>
$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
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?
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
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)
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
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.
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.