Hoogste waarde uit array en subarrays
Ik heb het volgende;
Een array met daarin eerst jaartallen en daarin steeds een array met maanden. Per maand wordt zo bijgehouden wat de maandomzet is.
Dus:
2015
- 1 > 1000
- 2 > 1500
- 3 > 4200
etc
2016
- 1 > 2000
- 2 > 2500
etc
Daar komt een mooie lijngrafiek uit en een tabel (x-as jaren, y-as maanden).
In die tabel wil ik nu eigenlijk de beste maand van alle jaren een andere kleur geven.
Stel ik heb $omzet[2015][11], hoe kan ik dan het beste checken of dit wel of niet de hoogste is vergeleken met $omzet[2012][11], $omzet[2013][11], $omzet[2014][11], $omzet[2016][11]?
Ik heb zelf het idee dat ik het te moeilijk ga zoeken.
If($array[12][2016] == max($array[12])) geeft de hoogste aan.
Stel we noemen de array met alles maanden en omzetten voor het gemak even $values. Vervolgens gebruik je daarnaast nog een variabele (array) bijv. $highest.
Nu ga je de $values array doorlopen. In die loop controleer je of $highest geset (isset) is. Zo niet dan sla je in $highest de maand en de waarde van de omzet op (dit is dus automatisch de eerste maand in de loop). Vervolgens doorloop je de rest van de loop en controleer je of de omzet hoger is dan de omzet die je in $highest hebt opgeslagen. Zo ja, dan sla je de nieuwe maand en omzet op in $highest. Na het doorlopen van de loop zit dan in $highest de maand met de hoogste omzet.
Gewijzigd op 07/02/2017 17:16:01 door Ozzie PHP
Code (php)
Dan blijft de array intact zodat ook de grafiek werkend blijft, gebruik ik max() van SanThe en doorloop ik de array zoals Ozzie tipte.
Het werkt, bedankt!
Maar nu krijg je niet de beste maand terug. Dat was toch de bedoeling?
In $omzet zit dus de genoemde array met de maandomzetten per maand, per jaar.
Ik krijg nu netjes true terug als het ingegeven maand/jaar de beste maand is (dus wel of niet de beste februari van de afgelopen jaren) en false als het niet is.
Ah oke ... ik dacht dat je 1 maand eruit wilde hebben die van alle maanden de beste is, maar als ik je nu goed begrijp wil je dus de beste januari, de beste februari, de beste maart enz. van de afgelopen jaren?
Ik bedoel: misschien is het mogelijk om ipv door een array te zoeken, de brondata te gebruiken (database?) om de waarden die je zoekt op te halen.
Quote:
als ik je nu goed begrijp wil je dus de beste januari, de beste februari, de beste maart enz. van de afgelopen jaren?
In een tabel staan van elke maand de maandomzetten. De cel met de beste januari (van die rij jaren), de cel met de beste februari etc wil ik een andere kleur geven.
Dus alle maanden worden weergegeven, enkel de beste maand wil ik een andere kleur geven.
Quote:
de brondata te gebruiken (database?) om de waarden die je zoekt op te halen.
Het komt inderdaad uit een database. Versimpelt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
SUM(aantal * prijs) - korting AS omzet
, MONTH(vandatum) AS maand
FROM
tabel
LEFT JOIN .. ON .. = .. // een aantal JOINS (voor hier nu onbelangrijk)
WHERE
status_ID IN (4,5)
AND YEAR(vandatum) = '".(date('Y') - 5)."'
AND soort IN (1,2,3,4,5,9,11)
GROUP BY
MONTH(vandatum)
ORDER BY
MONTH(vandatum) ASC
SUM(aantal * prijs) - korting AS omzet
, MONTH(vandatum) AS maand
FROM
tabel
LEFT JOIN .. ON .. = .. // een aantal JOINS (voor hier nu onbelangrijk)
WHERE
status_ID IN (4,5)
AND YEAR(vandatum) = '".(date('Y') - 5)."'
AND soort IN (1,2,3,4,5,9,11)
GROUP BY
MONTH(vandatum)
ORDER BY
MONTH(vandatum) ASC
Op zich werkt het nu goed met die paar regeltjes function. Maar wellicht kan het inderdaad nog makkelijker direct vanuit de database.