php funktion

Hallo,

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

<?php
function maximum()
 {
  $zahlen = func_get_args();
  $anzahl = func_num_args();
  
  $mx = $zahlen[0];
   for ($i=5; $i<$anzahl; $i++)
    {
	 if ($zahlen[$i] > $mx)
	  {
	   $mx = $zahlen[$i];
	  }
	}
   return $mx;
 }
?>

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 :smiley: Die macht genau das selbe. Nur nicht falsch :smiley:

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 :slight_smile:
Falls nicht, einfach weitere Fragen stellen :slight_smile:

Wieso denn for ($i = 5)?

[php]<?php

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;
}

echo maximum(1, 2, 3, 4, 5);
echo ‚
‘;
echo max(1, 2, 3, 4, 5);[/php]

Die Funktion gibt es schon fertig in PHP eingebaut: PHP: max - Manual

Edit: Timing ist alles. ;ugl

oooh, das mit dem Startwert ist Misst. Müsste doch $i=0 heissen!..werde mir eure Erklärung genauer anschauen. Erstmal vielen vielen Dank!

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 :smiley: Und den Schritt kann man sich ja von der Logik her sparen :slight_smile: 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 :slight_smile:

könnte ich dann auch das ganze so schreiben?

$zahlen = array ($x, $y);

anstatt…

$zahlen = func_get_args ();

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;

…aber der erste Wert im array ist doch immer der „Nullte“…dann 1 dann2 …usw…
ich glaube ich habe da irgendwie einen Denkfehler?!?

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 :smiley: hab ich verpennt, dass es sowas wie negative zahlen auch gibt :slight_smile: Also Corraggiouno bitte die Möglichkeit mit $mx = 0 aus deinem kopf streichen :smiley:

$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!?

Wieso Fehler ausgeebn?
Der fragt -2 > -1
Naürlich ist -2 kleiner. Somit bleibt $mx die Maximum-Zahl (vorerst)

<?
function maximum()
   {
      $zahlen = func_get_args();
      $anzahl = func_num_args();

      $mx = $zahlen[0];
      for($i=0; $i<$anzahl; $i++)
         if ($zahlen[$i] > $mx)
            $mx = $zahlen[$i];

      return $mx;
?>
   }
<?
echo "<p>" . maximum(4,5) . "<br />";
?>

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?

Ich verstehe das Problem nicht.

Edit: Aber was du schreibst, klingt richtig.

[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;

}[/PHP]

Warum wird hier eigentlich die existent der vorhandenen Funktionen ignoriert?
[php]
$groessteZahl = max(1,2,3,5,7,2,34,0,456,23,2,1);
[/php]
[php]
function maximum() {
$zahlen = func_get_args();
natsort($zahlen);
return array_pop($zahlen);
}
$groessteZahl = maximum(1,2,3,5,7,2,34,0,456,23,2,1);
[/php]

Lies mal #2, #3 und #5.

Ich denke, hier geht’s eher darum, das Schreiben von Algorithmen zu üben.