Hallo dames en heren,

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.
En als je het $array[maand][jaren] maakt?

If($array[12][2016] == max($array[12])) geeft de hoogste aan.
Misschien is er een handige array-functie voor (geen idee) maar anders zou je gewoon alle waardes in de array kunnen doorlopen.

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.
Ik heb het nu, mede door de ingevingen die ik vanuit jullie bijdrage kreeg, zo gemaakt:


<?php
function bestemaand($m,$j,$omzet){
	
	$omzetten = array();
	
	foreach(range(date('Y')+1,date('Y')-5) AS $ja){
	$omzetten[] = $omzet[$ja][$m];	
	}
	
	if($omzet[$j][$m] == max($omzetten)){
		return true;
	}
	else{
		return false;
	}	
}
?>


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 $m zit het maandnummer dat ik wil controleren, in $j het jaartal dat ik wil controleren.
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?
En waar komen die getallen vandaan?

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.
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.

de brondata te gebruiken (database?) om de waarden die je zoekt op te halen.

Het komt inderdaad uit een database. Versimpelt:

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


Op zich werkt het nu goed met die paar regeltjes function. Maar wellicht kan het inderdaad nog makkelijker direct vanuit de database.

Reageren