Hoogste waarde uit array en subarrays

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ramon van Dongen

Ramon van Dongen

07/02/2017 16:57:46
Quote Anchor link
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.
 
PHP hulp

PHP hulp

19/04/2024 21:10:33
 
- SanThe -

- SanThe -

07/02/2017 17:09:11
Quote Anchor link
En als je het $array[maand][jaren] maakt?

If($array[12][2016] == max($array[12])) geeft de hoogste aan.
 
Ozzie PHP

Ozzie PHP

07/02/2017 17:14:23
Quote Anchor link
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.
Gewijzigd op 07/02/2017 17:16:01 door Ozzie PHP
 
Ramon van Dongen

Ramon van Dongen

07/02/2017 17:16:04
Quote Anchor link
Ik heb het nu, mede door de ingevingen die ik vanuit jullie bijdrage kreeg, zo gemaakt:

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
<?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!
 
Ozzie PHP

Ozzie PHP

07/02/2017 17:22:26
Quote Anchor link
Maar nu krijg je niet de beste maand terug. Dat was toch de bedoeling?
 
Ramon van Dongen

Ramon van Dongen

07/02/2017 17:24:26
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

07/02/2017 17:30:58
Quote Anchor link
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?
 
Ivo P

Ivo P

07/02/2017 17:46:07
Quote Anchor link
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.
 
Ramon van Dongen

Ramon van Dongen

07/02/2017 19:11:17
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
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


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



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.