PHP Funktion mitte eleganter bzw. kürzer ?

null4null

echo "$L$O$S$E$";
ID: 335517
L
14 Dezember 2008
298
8
Huhu ,

hier ist meine funktion, die anhand von 3 übergebenen Zahlen die mittlere Zahl ausgibt.

PHP:
function mitte($z1,$z2,$z3)
{
    if (($z1 > $z2 && $z1 < $z3)||($z1 > $z3 && $z1 < $z2))
    {
       return "A";
    }
    elseif (($z1 > $z2 && $z2 > $z3)||($z3 > $z2 && $z2 > $z1))
    {
       return "B";
    }
    elseif (($z3 < $z1 && $z2 < $z3)||($z3 < $z2 && $z3 > $z1)){
       return "C";
    }
}

Gibts Denkansätze von euch diese Funktion kürzer bzw. eleganter zu lösen? :ugly:

... über anregungen freue ich mich;)
 
Ich würds folgendermaßen machen:

PHP:
function mitte($z1, $z2, $z3) {
   //Weiße den Zahlen den jeweiligen Rückgabe Wert als Key zu
   //oder (falls möglich) einfach direkt als Array übergeben!
   $tmpArr = array("A" => $z1, "B" => $z2, "C" => $z3);

   //Sortiert das Array klein -> groß. Erhält Key-Assoziationen
   asort($tmpArr);

   //Liest die Keys aus
   $midkey = array_keys($tmpArr);

   //Gibt den zweiten Key zurück (der automatisch der des mittleren Wertes ist)
   return $midkey[1];
}

Wies Performancetechnisch aussieht, hab ich jetzt ehrlich gesagt keine Lust zu testen, da das bei 3 miteinander zu vergleichenden Zahlen sowieso nur marginal ist.

Edit:
tleilax Version ist nochmal etwas kürzer, funktioniert allerdings nur, wenn du die Zahl statt den Buchstaben zurück geben möchtest.

allgemeine Funktion (nicht auf 3 Zahlen beschränkt):
PHP:
function mitte($zahlen) {
   //Prüft, ob die Anzahl der angegebenen Zahlen ungerade ist, ansonsten wird abgebrochen
   if((count($zahlen)%2)!=0) {

      //Sortiert das Array klein -> groß. Erhält Key-Assoziationen
      asort($zahlen);

      //Liest die Keys aus
      $midkey = array_keys($zahlen);

      //Gibt den mittleren Key zurück
      return $midkey[floor(count($zahlen)/2)+1];

      //Oder den mittleren Wert zurück geben
      //($midkey kann dann eingespart werden!
      //sort anstatt asort verwenden, damit
      //die Keys numerisch werden)
      //
      //return $zahlen[floor(count($zahlen)/2)+1];

   } else return false;
}

Grüße
Helo
 
Zuletzt bearbeitet:
PHP:
function mitte($z1, $z2, $z3) {
  $arguments = func_get_args();
  sort($arguments);
  return $arguments[1];
}
;)
 
tleilax Version ist nochmal etwas kürzer, funktioniert allerdings nur, wenn du die Zahl statt den Buchstaben zurück geben möchtest.
Von der Zahl auf den Buchstaben kommst du mit
PHP:
echo chr(65 + $zero_based_index); // 65 = 'A'
 
Das ist mir bewusst @ theHacker, jedoch weiß ich ja nicht was der TE wirklich zurück geben möchte ...
 
"Rate, welche Zahl in der Mitte liegt" - 33:66-Game für ne Billig-Loseseite? :think: :ugly:
Nicht jeder kennt die chr()-Funktion, drum habs ich trotzdem mal gepostet.
Im Allgemeinen isses eh sinniger, mit dem Array-Index zu arbeiten, anstatt mit irgendeiner komischen Buchstabenrepräsentation. $index ≥ 26 und man hat verloren :mrgreen:
 
Dankeschön für eure klasse Ideen :!:



Spoiler ... Just guessing...
:naughty: es ist keine billige Lose-seite geplant