Stefan Theiss: Mehrere Werte bei einer Funktion zurückgeben

Hallo Forum!

Ich lerne gerade PHP und bin momentan bei dem Kapitel Funktionen. Jetzt stellt sich mir die Frage, wie ich z.B. mehrere Werte zurückgeben kann. Aktuelles Beispiel Berechnung des Ostersonntagdatums, abhängig vom Jahr:

function ostersonntag($j)
{
  $d = ((15 + floor($j/100) - floor($j/400)
      - floor((8 * floor($j/100) + 13) / 25)) % 30
      + 19 * ($j % 19)) % 30;

// Berechnung von D
  if($d == 28 && $j % 17 >= 11) $D = 27;
  else if($d == 29) $D = 28;
  else if($d != 28 || $d != 29) $D = $d;

// berechnung von klein e

$e = (2 * ($j%4) + 4 * ($j%7) + 6 * $D
      + (6 + floor($j/100) - floor($j/400) - 2) % 7) % 7;

// Rückgabe von Tag und Monat

$m = "03";
  $t = 21 + $e + $D + 1;

if($t > 31)
    {
     $m = "04";
     $t = $t - 31;
    }

if($t < 10) $t = "0".$t;

return $t, $m;  //Problemstelle
}

Der Aufruf schaut dann z.B. so aus echo ostersonntag($_POST['jahr']);

Das Problem ist jetzt aber dass ich immer einen Fehler an der der Stelle return $t, $m; bekomme. Wie aber kann ich nun erreichen, dass die Funktion mehr als einen Wert zurückliefert?

Grüße aus München,

euer Stefan

  1. Hi,

    Das Problem ist jetzt aber dass ich immer einen Fehler an der der Stelle return $t, $m; bekomme. Wie aber kann ich nun erreichen, dass die Funktion mehr als einen Wert zurückliefert?

    Gib _ein_ Array mit mehreren Elementen zurück.

    Grüße aus Barsinghausen,
    Fabian

    1. Gib _ein_ Array mit mehreren Elementen zurück.

      Das hätte ich jetzt versucht, aber leider funktioniert es nicht (ich erhalte uach keine Fehlermeldung). Hier noch mal der Code:
      ------------------------------
      funktion osterberechnung
      ------------------------------

      function ostersonntag($j)
      {
        $d = ((15 + floor($j/100) - floor($j/400)
            - floor((8 * floor($j/100) + 13) / 25)) % 30
            + 19 * ($j % 19)) % 30;

      // Berechnung von D
        if($d == 28 && $j % 17 >= 11) $D = 27;
        else if($d == 29) $D = 28;
        else if($d != 28 || $d != 29) $D = $d;

      // berechnung von klein e

      $e = (2 * ($j%4) + 4 * ($j%7) + 6 * $D
            + (6 + floor($j/100) - floor($j/400) - 2) % 7) % 7;

      // Rückgabe von Tag und Monat

      $m = "03";
        $t = 21 + $e + $D + 1;

      if($t > 31)
          {
           $m = "04";
           $t = $t - 31;
          }

      if($t < 10) $t = "0".$t;

      $result = array($t, $m);
      return ($result);

      }

      ------------------------------
      aufruf von osterberechnung($j)
      ------------------------------
      include "ub62datum.inc.php";  //datei mit obigen Inhalt

      echo "<table border='1'>\n";
      echo "<tr><td>JAHR</td><td>DATUM</td></tr>\n";

      ostersonntag(1998);
      echo "<tr><td>Jahr: 1988</td><td>Tag".$result[0]."</td><td>Monat".$result[1]."</td></tr>\n";

      echo "</table>\n";

      Die Funktion selber, also die Berechnung stimmt, die ist aus einem Buch, ich will jetzt eben die Funktion ein bisschen umschreiben, weil ich as ganze mit den Referenzen, wie es im Buch beschrieben ist, nicht versteh :-( (Sinn, Zweck, etc.)

      1. Hallo Stefan,


        funktion osterberechnung

        Hm, deine Mühen in Ehren, aber du kenst easter_date() (http://de3.php.net/manual/de/function.easter-date.php)?

        weil ich as ganze mit den Referenzen, wie es im Buch beschrieben ist, nicht versteh :-( (Sinn, Zweck, etc.)

        Ein Link: http://de3.php.net/manual/de/functions.arguments.php. Google weiß garantiert auch eine Menge über den Sinn von Referenzparametern und den Unterschied zu Werteparametern ("call by reference", "call by value").
        Der Unterschied besteht grob gesagt daran, dass du bei "call by reference" auf dem selben Objekt operierst. Änderst du innerhalb deiner Funktion den Wert, so ist dieser auch außerhalb geändert. Bei "call by value" schickst du quasi nur eine Kopie des entsprechenden Objektes mit, außerhalb der Funktion bleiben Änderungen also unbemerkt.

        Grüße
          David

        --
        >>Nobody will ever need more than 640k RAM!<<
        1981 Bill Gates
      2. Hallo Stefan,

        ostersonntag(1998);

        du musst das was ostersonntag() zurückgibt auch speichern, also so:
          $result = ostersonntag(1998);
        (wobei die Variable aber nicht $result heißen muss - diese Variable hat mit dem Array in der Funktion nichts gemeinsam)

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
  2. Hallo Stefan,

    Jetzt stellt sich mir die Frage, wie ich z.B. mehrere Werte zurückgeben kann.

    wie Fabian schon schrieb - verwende ein Array: http://www.dclp-faq.de/q/q-funktion-rueckgabe.html.

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|