• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

php funktion

Corraggiouno

Mitglied
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
Code:
<?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 :D Die macht genau das selbe. Nur nicht falsch :D

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 :)
 
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 '<br />';
echo max(1, 2, 3, 4, 5);

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!
 
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 :D 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 :)
 
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?!?
 
könnte ich dann auch das ganze so schreiben?
Code:
$zahlen = array ($x, $y);
anstatt.........
Code:
$zahlen = func_get_args ();

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.
 
Code:
$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;

Code:
print "Das Maximum der beiden Werte ist: " . maximum(-1,-2);
Bitte berichtigt mich, wenn ich mit meiner Erklärung falsch liege!?
 
Code:
<?
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;
?>
   }
Code:
<?
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?
 
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;
   }
 
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:
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);
 
Zurück
Oben