valentintools: keys von arrays

Hallo!

Hier ist mal ein kleines Script...

<?php
$monat = array("January" => "Januar", "February" => "Februar", "March" => "März", "April" => "April", "May" => "Mai", "June" => "Juni", "July" => "Juli", "August" => "August", "September" => "September", "October" => "Oktober", "November" => "November", "December" => "Dezember");
$monatsname = date("F");
echo "$monat[$monatsname]";
?>

Ist es erlaubt, anstatt dieses Scripts folgendes zu schreiben?

<?php
$monat = array("January" => "Januar", "February" => "Februar", "March" => "März", "April" => "April", "May" => "Mai", "June" => "Juni", "July" => "Juli", "August" => "August", "September" => "September", "October" => "Oktober", "November" => "November", "December" => "Dezember");
echo "$monat[date('F')]"
?>

Also als key direkt die Funktion date() anzugeben. Oder dürfen als keys keine Funktionen angegeben werden?

Vielen Dank im Voraus!

  1. Hallo valentintools.

    Ist es erlaubt, anstatt dieses Scripts folgendes zu schreiben?

    Hast du es ausprobiert? Wenn du (bei auf E_ALL gestelltem error_reporting, versteht sich) keine Fehlermeldung bekommst, ist alles in Ordnung.

    $monat = array("January" => "Januar", "February" => "Februar", "March" => "März", "April" => "April", "May" => "Mai", "June" => "Juni", "July" => "Juli", "August" => "August", "September" => "September", "October" => "Oktober", "November" => "November", "December" => "Dezember");
    echo "$monat[date('F')]"

    Mir drängt sich der Verdacht auf, dass du eigentlich setlocale nutzen möchtest, um deutsche Monatsnamen zu erzeugen.

    Einen schönen Montag noch.

    Gruß, Ashura

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
    1. Mir drängt sich der Verdacht auf, dass du eigentlich setlocale nutzen möchtest, um deutsche Monatsnamen zu erzeugen.
      Hm... von diesem Befehl hab ich noch nie etwas gehört. Wie setze ich ihn korrekt ein? Ich möchte das Datum dynamisch ausgeben, also einfach $datum = date('j. F Y');
      Wie realisiere ich nun mit diesem setlocale Befehl die deutschen Monatsnamen? (Das PHP-Handbuch hat mir nicht so wirklich geholfen.)

      1. Hallo valentintools.

        Wie realisiere ich nun mit diesem setlocale Befehl die deutschen Monatsnamen? (Das PHP-Handbuch hat mir nicht so wirklich geholfen.)

        Dann schau dir das allererste Beispiel noch einmal genauer an.

        Du notierst setlocale am Anfang deines Scriptes, womit dir bis zum Ende des Scriptes eine deutsche Locale zur Verfügung steht, sofern überhaupt eine installiert ist.

        Einen schönen Montag noch.

        Gruß, Ashura

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]
        1. Du notierst setlocale am Anfang deines Scriptes, womit dir bis zum Ende des Scriptes eine deutsche Locale zur Verfügung steht, sofern überhaupt eine installiert ist.

          Ach so... also dann würde es in meinem Fall lauten:
          setlocale('LC_ALL', 'de_DE');
          Warum wie stell ich fest, ob eine deutsche Lokale auf meinem Server installiert ist bzw. wie kann ich ggf. eine Locale auf einem Server installieren?

          1. Hallo valentintools.

            Ach so... also dann würde es in meinem Fall lauten:
            setlocale('LC_ALL', 'de_DE');

            Wenn du damit direkt die korrekte Locale triffst ja. Ansonsten gibst du eben einige weitere Mögliche Werte an.

            Warum wie stell ich fest, ob eine deutsche Lokale auf meinem Server installiert ist …

            Dass sie installiert ist, merkst du daran, dass nach der Ausführung von setlocale die Ausgabe von date() einen deutschen Monatsnamen erzeugt.

            … bzw. wie kann ich ggf. eine Locale auf einem Server installieren?

            Ich könnte dir höchstens den Debian-Weg schildern, welcher aber natürlich nur bei Debconf-basierte Distributionen funktioniert.

            Wie du die erforderlichen locales installierst, solltest du der Dokumentation der genutzen Distribution entnehmen können.

            Einen schönen Montag noch.

            Gruß, Ashura

            --
            sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
            „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
            [HTML Design Constraints: Logical Markup]
  2. Hi,

    echo "$monat[$monatsname]";
    Ist es erlaubt, anstatt dieses Scripts folgendes zu schreiben?
    echo "$monat[date('F')]"

    ja, das ist erlaubt - vom fehlenden Semikolon abgesehen. Hauptsache, in den [Klammern] steht ein Ausdruck, der einen gültigen Key ergibt. Ob der als Konstante im Quelltext steht, aus dem Inhalt einer Variablen oder als komplizierter Ausdruck mit einem Funktionsaufruf gebildet wird, ist schnurz.

    Viel heftiger stolpere ich bei deinem Codebeispiel wieder mal über die Unsitte, einzelne Variablen beim echo wieder in Anführungszeichen zu setzen. Warum machen das so viele? Was soll der Unsinn? Das macht's doch nur komplizierter.

    Davon abgesehen würde ich in deinem Fall raten, nicht Strings (Monatsnamen) als Schlüssel zu verwenden, sondern Zahlenwerte von 1=>"Januar" bis 12=>"Dezember". Ich kenne deinen konkreten Anwendungsfall nicht, halte das mit dem numerischen Index aber für praktischer, weil das Datum ja meistens sowieso numerisch gespeichert wird.

    So long,
     Martin

    --
    Idealismus wächst mit der Entfernung zum Problem.