bin noch ein ziemlicher Anfänger was php betrifft. Nun bin ich auf eine Funktion gestoßen, die mir nicht klar verständlich ist.
Die Funktion ermittelt das Maximum, von beliebig vielen Zahlen
Was func_get_args () und func_num_args () machen ist mir klar.
Beginned mit $mx = $zahlen[0]?
Was bedeutet $zahlen[0]?..das ist ein numerisch indiziertes Feld, oder?
Könnte jemand mir diese Funktion näher erklären?
Mir ist ein Rätsel wieos die Schleife bei 5 anfängt.
Als Anfangs Maximum, wird die Erste Zahl genommen aus dem Array func_get_args (d sagtest ja du weisst was das macht). Dann wird für jede zahl geprüft, ob diese Größer ist, als die derzeitig höchste zahl. Wenn ja wird diese zahl nun als Höchste zahl gesetzt.
Die Funktion brachst du jedoch nicht, da es die Funktion max() gibt Die macht genau das selbe. Nur nicht falsch
und ja. $zahlen ist ein numerisches Array. und mit $zahlen[0] greifst du auf den ersten Wert im Array zu.
Hoffe mal das beantwortet deine Fragen
Falls nicht, einfach weitere Fragen stellen
function maximum()
{
$zahlen = func_get_args(); // Parameter als numerisch indiziertes Array
$anzahl = func_num_args(); // Anzahl Parameter
$mx = $zahlen[0]; // anfänglicher Maximalwert = Wert des erstes Array-Eintrags
for ($i=1; $i<$anzahl; $i++) // Für jedes Element des Arrays ab dem zweiten…
{
if ($zahlen[$i] > $mx) // Wenn größer als aktuelles Maximum, …
{
$mx = $zahlen[$i]; // …als neues Maximum setzen
}
}
return $mx;
}
Müsste $i=1 sein, da der maximalwert ja sowieso den Wert der Ersten zahl im Array hat. Somit wäre der Erste vergleich dann bei $i=0;
Ist Zahl1 > Zahl1?
natürlich nicht Und den Schritt kann man sich ja von der Logik her sparen Würde auch funktionieren wenn du $i=0 machst, aber wäre halt abwegig von der Logik.
Aber wie mermhaus und ich schon geschrieben haben. Schau dir mal die interne PHP Funktion „max()“ an. Die macht das selbe
Nein. Was sollte das denn bringen?
Bzw ja. Wenn du nur das maximum von 2 Zahlen ermitteln willst.
Was genau willst du denn machen?
…aber der erste Wert im array ist doch immer der „Nullte“…dann 1 dann2 …usw…
ich glaube ich habe da irgendwie einen Denkfehler?!?
Ja es fängt immer beim 0. Wert an.
Du kannst die Schleife auch so machen.
Du setzt vor der Schleife den Maximalwert auf 0.
Dann vergleicht du mit allen Zahlen aus dem Array.
Dann ist das Maximum von -3 und -4 aber 0. $mx muss vor dem ersten Schleifendurchlauf auf das erste Array-Element gesetzt werden. Daran ist nicht zu rütteln. Ob du dann $i bei 0 oder bei 1 starten lässt, macht den Kuchen auch nicht mehr fett.
Beim ersten Schleifendurchlauf ($i = 1) steckt der Wert für $zahlen[0] in $mx. Es wird also zuerst $zahlen[1] („entspricht“ $i) mit $zahlen[0] („entspricht“ $mx) verglichen. Das Maximum davon dann mit $zahlen[2], das Maximum davon dann mit $zahlen[3]… usw.
Asche auf mein Haupt hab ich verpennt, dass es sowas wie negative zahlen auch gibt Also Corraggiouno bitte die Möglichkeit mit $mx = 0 aus deinem kopf streichen
$mx = $zahlen[0]; // Ist das dann der Wert -1 ?
for ($i=1; $i<$anzahl; $i++) // 1. Schleifendurchgang
{
if ($zahlen[$i] > $mx) // -2 > -1 --> Stimmt das?
{
$mx = $zahlen[$i]; // dann hat jetzt $mx den Wert -2, aber eigentlich müsste das
} Programm einen Fehler ausgegebe, da -2 kleiner ist als -1
}
return $mx;
print "Das Maximum der beiden Werte ist: " . maximum(-1,-2);
Bitte berichtigt mich, wenn ich mit meiner Erklärung falsch liege!?
Wenn ich jetzt nun den ersten Schleifendurchlauf beginne, dann wird doch im oberen Code die 4 mit der 4 verglichen, oder?
Wobei dann aber vom logisch betrachtet 4 nicht größer 4 ist?!?!
Kann mir da jemand einen Tipp geben?
[PHP]<?php
function maximum() {
$zahlen = func_get_args();
$anzahl = func_num_args();
$mx = $zahlen[0]; // hier wird davon ausgegangen, dass die erste Zahl evtl. schon die größte ist
for($i=1; $i<$anzahl; $i++) { // darum wird auch mit der zweiten Zahl begonnen
if ($zahlen[$i] > $mx) { // Test, ob die aktuell durchlaufende Zahl größer ist, als die bisher größte
$mx = $zahlen[$i];
}
}
return $mx;