average()
Naast max(), min(), array_sum() is er geen average() (oftewel array_average()) om het gemiddelde te berekenen.
Met deze functie heb je die wel.
Het kan korter, maar er moet natuurlijk wel een controle zijn. Die is hierbij ingebouwd.
Voorbeeld: http://www.zunflappie.nl/temp/average.php
Gesponsorde koppelingen
PHP script bestanden
34 reacties op 'average()'
Gesponsorde koppelingen
Het kan ook zo:Dan krijg je een melding van PHP als je iets anders dan een array in de functie als argument mee wilt geven. return false; vind ik toch een beetje vaag. Je moet dan eigenlijk altijd controleren of de functie false oplevert of niet.
Verder leuke snippet inderdaad :-P Lekker nuttig, en dat is alles wat een code hier hoeft te zijn.
Code (php)
Verder leuke snippet inderdaad :-P Lekker nuttig, en dat is alles wat een code hier hoeft te zijn.
Nee, het is geen slecht idee een false weer te geven wanneer je geen array hebt.
Delen door 0 mag niet, als count een 0 geeft, krijg je wiskundige nonsens.
Php gaat er ook van uit dat niet-numerieke variabelen toch de waarde 0 krijgen; in javascript krijg je een NAN (Not A Number) fout. Eventueel zou het ook nuttig kunnen zijn daarop te controleren.
Delen door 0 mag niet, als count een 0 geeft, krijg je wiskundige nonsens.
Php gaat er ook van uit dat niet-numerieke variabelen toch de waarde 0 krijgen; in javascript krijg je een NAN (Not A Number) fout. Eventueel zou het ook nuttig kunnen zijn daarop te controleren.
Ik ben het met Marcel eens. Je kunt beter "Array $array" doen en een error verwachten als je geen array geeft. Anders ben je weer heel 'loose' bezig zonder verder doel.
PHP zelf gooit ook errors als je een verkeerde argument meegeeft, dus het is veruit het meest logisch om dit zelf ook te gebruiken.
PHP zelf gooit ook errors als je een verkeerde argument meegeeft, dus het is veruit het meest logisch om dit zelf ook te gebruiken.
De controle of de getallen niet leeg (of 0) zijn ingevoerd.
Maar wat moet ik returnen als er fouten zijn? Een false is niet logisch, maar wat dan?
Gewoon een 0?
Het script is reeds gewijzigd en controleerd dus of de array een array is, of deze niet leeg is en de getallen bij elkaar geen 0 zijn (dus geen inhoud).
Maar wat moet ik returnen als er fouten zijn? Een false is niet logisch, maar wat dan?
Gewoon een 0?
Het script is reeds gewijzigd en controleerd dus of de array een array is, of deze niet leeg is en de getallen bij elkaar geen 0 zijn (dus geen inhoud).
Waarom mag de array_sum geen 0 zijn? als ik het gemiddeld van 2 en -2 wil weten, dan komt daar toch gewoon 0 uit??
Edit:
Zie dat je een nul retourneerd ipv een false, dan maakt het nix uit]/edit]
Waarom nooit een false retourneren? Dan weet je toch nooit zeker of het gelukt is?
Daarnaast is is_array overbodig geworden
Ik zou het zo doen
Waarom nooit een false retourneren? Dan weet je toch nooit zeker of het gelukt is?
Daarnaast is is_array overbodig geworden
Ik zou het zo doen
# Citroen: als de som van de array 0 is, dan returnd ie toch ook een 0?
Ipv dus een false krijg je een 0, dus dat maakt geen verschil.
De functie zal nu altijd een getal retourneren, desnoods een 0.
is_array kan inderdaad weg en zal ik zo even uit het script verwijderen, want het is immers nu altijd een array.
Over de naam van de functie: bij min() en max() moet je ook een array opgeven en php-zelf gebruikt daarbij ook het woord array niet.
Logisch, want van een int of string kan je geen gemiddelde berekenen. Het moet dus altijd een array zijn.
Vandaar die naamkeuze.
Wat ik wel zie bij min() en max() is dat je onbeperkte arrays op kan geven.
Hoe doen ze dat? Dus het uitlezen hoeveel arrays er zijn opgegeven?
Want dat is wel een leuke toevoeging.
Ipv dus een false krijg je een 0, dus dat maakt geen verschil.
De functie zal nu altijd een getal retourneren, desnoods een 0.
is_array kan inderdaad weg en zal ik zo even uit het script verwijderen, want het is immers nu altijd een array.
Over de naam van de functie: bij min() en max() moet je ook een array opgeven en php-zelf gebruikt daarbij ook het woord array niet.
Logisch, want van een int of string kan je geen gemiddelde berekenen. Het moet dus altijd een array zijn.
Vandaar die naamkeuze.
Wat ik wel zie bij min() en max() is dat je onbeperkte arrays op kan geven.
Hoe doen ze dat? Dus het uitlezen hoeveel arrays er zijn opgegeven?
Want dat is wel een leuke toevoeging.
Jij krijgt nu nooit een false terug terwijl dat wel moet gebeuren. Bijvoorbeeld wanneer de array leeg is. Het is een beetje stom om dan maar gewoon een 0 terug te geven, want 0 != gemiddelde van niets.
Naamkeuze, zou idd ook avg kunnen zijn, hangt er net vanaf wat je prefereerd. ik vind met array ervoor makkelijker omdat je ook nog een functie zou kunnen maken die van ints een gemiddelde uitrekend:
vb: function avg($getal1, $getal2)
De array geeft dus aan dat het om een gemiddelde van een array gaat.
Onbeperkte arrays? Simpel:
http://nl2.php.net/manual/en/function.func-get-args.php, daarmee kan je kijken wat er aan parameters is opgegeven. Nu moet je wel controleren of alles arrays zijn.
Succes
Naamkeuze, zou idd ook avg kunnen zijn, hangt er net vanaf wat je prefereerd. ik vind met array ervoor makkelijker omdat je ook nog een functie zou kunnen maken die van ints een gemiddelde uitrekend:
vb: function avg($getal1, $getal2)
De array geeft dus aan dat het om een gemiddelde van een array gaat.
Onbeperkte arrays? Simpel:
http://nl2.php.net/manual/en/function.func-get-args.php, daarmee kan je kijken wat er aan parameters is opgegeven. Nu moet je wel controleren of alles arrays zijn.
Succes
# Citroen: bedankt voor func_get_args(). Daar kan ik weer veel verder mee. Alleen nu nog array_merge() laten doen wat het moet doen, namelijk alles combineren tot 1 array (array_combine() doet niet wat ik wil).
De naam zal niet gewijzigd worden, want ik maak wel dat als een opgegeven $var geen array is, maar wel int, dat die dan ook wordt meegeteld als cijfer.
Dus dat dit het wordt:
average($array, $int, $int, $array, $int)
Dat dan alle getallen meetellen.
De naam zal niet gewijzigd worden, want ik maak wel dat als een opgegeven $var geen array is, maar wel int, dat die dan ook wordt meegeteld als cijfer.
Dus dat dit het wordt:
average($array, $int, $int, $array, $int)
Dat dan alle getallen meetellen.
Edit:
Het script is dusdanig gewijzigd dat je ongelimiteerd INTs en ARRAYs kan opgeven.
Zie voorbeeld en code.
Het werkt goed, maar het is nogal omslachtig.
Helaas werkt array_merge() niet zoals ik wil (hij plaatst ze in een subarray).
Het script is dusdanig gewijzigd dat je ongelimiteerd INTs en ARRAYs kan opgeven.
Zie voorbeeld en code.
Het werkt goed, maar het is nogal omslachtig.
Helaas werkt array_merge() niet zoals ik wil (hij plaatst ze in een subarray).
Een stuk beter, nu kan je hem overal voor gebruiken.
Ik zou ipv fout echter een false retourneren. Dat is veel gebruikelijker. Of een exception gooien.
Als je een fout retourneerd dan moet je zo kijken of het gemiddelde berekenen gelukt is:
if(average(allemaal dingen) !== false)
{
echo het gemiddelde is average(allemaal dingen);
}
Op die manier ontstaat er geen verwaring over een gemiddelde van 0 (bij 4 en -4) en bij een false.
Ik zou ipv fout echter een false retourneren. Dat is veel gebruikelijker. Of een exception gooien.
Als je een fout retourneerd dan moet je zo kijken of het gemiddelde berekenen gelukt is:
if(average(allemaal dingen) !== false)
{
echo het gemiddelde is average(allemaal dingen);
}
Op die manier ontstaat er geen verwaring over een gemiddelde van 0 (bij 4 en -4) en bij een false.
Ik denk dat het consistenter is om toch false terug te geven in plaats van een string of null, aangezien max dit ook doet, en vele andere PHP functies. Eventueel nog een trigger_error erbij om aan te geven wat de fout is. Mensen kunnen dan zelf wel de error onderdrukken met een apenstaartje wanneer ze voorbereid zijn op false als antwoord.
PS: naar mijn mening staat NULL niet voor onbekend, maar voor leeg. Een onbekende waarde is een waarde die je niet weet. Leeg is een toestand die je wel weet. FALSE daarentegen wordt binnen PHP constant gebruikt om een fout aan te geven (stripos, min, max, preg_match etc.) wanneer true/false niet een van de mogelijke normale antwoorden zijn.
Code (php)
1
2
2
bool(false)
PHP Warning: max(): Array must contain at least one element in /- on line 3
PHP Warning: max(): Array must contain at least one element in /- on line 3
PS: naar mijn mening staat NULL niet voor onbekend, maar voor leeg. Een onbekende waarde is een waarde die je niet weet. Leeg is een toestand die je wel weet. FALSE daarentegen wordt binnen PHP constant gebruikt om een fout aan te geven (stripos, min, max, preg_match etc.) wanneer true/false niet een van de mogelijke normale antwoorden zijn.
niet false retoureneren, want je stuurt tenslotte toch echt een array > verwarring
Waarom zou een array functie geen false kunnen opleveren? Ik snap die verwaring niet.
Zoals Jelmer al zei is null eigelijk nix. En om nou nix te retourneren alleen omdat er een foutje zit is ook weer zo cru
Maar een exception of een trigger_error is denk ik ook wel mooi
Waarom zou een array functie geen false kunnen opleveren? Ik snap die verwaring niet.
Zoals Jelmer al zei is null eigelijk nix. En om nou nix te retourneren alleen omdat er een foutje zit is ook weer zo cru
Maar een exception of een trigger_error is denk ik ook wel mooi
@Eddy en Citroen:
Je kunt natuurlijk ook gewoon een -1 retourneren.
@PHPErik:
Over de false waarde heb je naar mijn weten gelijk, dit zou natuurlijk -1 moeten zijn.
Een foreach met een lege array werkt gewoon (zonder fouten). Maar delen door 0 (een count() in een lege array()) werkt niet en retourneert een fout. Vandaar mijn opmerking hierover.
Een array_sum($array) / 0 geeft gewoon een fout.
Dus:
Je kunt natuurlijk ook gewoon een -1 retourneren.
@PHPErik:
Over de false waarde heb je naar mijn weten gelijk, dit zou natuurlijk -1 moeten zijn.
Een foreach met een lege array werkt gewoon (zonder fouten). Maar delen door 0 (een count() in een lege array()) werkt niet en retourneert een fout. Vandaar mijn opmerking hierover.
Een array_sum($array) / 0 geeft gewoon een fout.
Dus:
@ Barman:
Een -1 retourneren kan inderdaad niet om de reden die Jelmer hierboven geeft. Vooralsnog lijkt mij een 'false' alsnog het beste.
Tevens zal een lege array ($getallen) niet leeg kunnen zijn, want dan krijg je dus die false.
De controle staat er net iets boven de return.
en count($getallen) zal nooit false teruggeven, omdat de functie zelf voorziet in die array $getallen.
Hij kan wel 0 teruggeven (count dus!), en dan returnd mijn functie een false.
Een -1 retourneren kan inderdaad niet om de reden die Jelmer hierboven geeft. Vooralsnog lijkt mij een 'false' alsnog het beste.
Tevens zal een lege array ($getallen) niet leeg kunnen zijn, want dan krijg je dus die false.
De controle staat er net iets boven de return.
en count($getallen) zal nooit false teruggeven, omdat de functie zelf voorziet in die array $getallen.
Hij kan wel 0 teruggeven (count dus!), en dan returnd mijn functie een false.
Ah natuurlijk, dat ik daar niet aan gedacht had. Laten we het op false houden :)
De count controle staat in jullie voorbeeld net iets boven de return, ziet er dus goed uit. Ik doelde meer op het voorbeeld dat Marcel gaf (2e post).
Mijn voorbeeldje is ietsjes efficiënter, aangezien je dan maar 1 maal de count() hoeft uit te voeren. Maar dit is iets pietepeuterigs :D
De count controle staat in jullie voorbeeld net iets boven de return, ziet er dus goed uit. Ik doelde meer op het voorbeeld dat Marcel gaf (2e post).
Mijn voorbeeldje is ietsjes efficiënter, aangezien je dan maar 1 maal de count() hoeft uit te voeren. Maar dit is iets pietepeuterigs :D
Ik vind deze snippet wel een goed plan, op zich is een array prima te analyseren. In statistiek e.d. heb je nog veel meer functies, deze zouden het ook prima doen, waaronder:
= Modus
= Mediaan
= Standaardafwijking
= Modus
= Mediaan
= Standaardafwijking
U vraagt, wij draaien: http://www.phphulp.nl/php/scripts/11/1433 voor de modulus (niet per se voor getallen).
En http://www.phphulp.nl/php/scripts/1/1434 voor de mediaan. Deze laatste was niet zo moeilijk.
En http://www.phphulp.nl/php/scripts/1/1434 voor de mediaan. Deze laatste was niet zo moeilijk.
Om te reageren heb je een account nodig en je moet ingelogd zijn.
- Details
Door:
Eddy Erkelens- 5 jaar geleden
- 1.000 x bekeken
- Labels
- Geen tags toegevoegd.
- PHP scripts opties
- Snippets
- Nieuwste PHP scripts
- PHP script toevoegen


PHP hulp
0 seconden vanaf nu