dude: Position eines Elements im array ermitteln

Hi...
Mal ne dumme Frage sicher, aber irgendwie komm ich nicht drauf:

Ich habe hier ein assoziatives Array:

  
$monat = array("jan" => "Januar", "feb" => "Februar", "mrz" => "März", "apr" => "April", ... //bis Dezember  

ich möchte nun wissen, an welcher Position z.B. der Schlüssel "mrz" im Array steht.
Gibt es da eine "fertige" Funktion? Ich könnte das Problem auch mit einer Schleife lösen, aber rein Interesse halber frag ich.

Gruß...

  1. Hello,

    bisschen umständlich, aber das geht alles mit der Funktion array_keys()

    http://de2.php.net/manual/de/function.array-keys.php

    $_keys = array_keys($array);
    $_pos = array_keys($_keys, 'mrz');
    $keypos = $_pos[0];

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hello,

      bisschen umständlich, aber das geht alles mit der Funktion array_keys()

      http://de2.php.net/manual/de/function.array-keys.php

      $_keys = array_keys($array);
      $_pos = array_keys($_keys, 'mrz');

      und dazu müsste man auch noch 'was sagen:

      if (count($_pos[0]) > 0))
        {
        # oder vereinfacht:  if ($_pos)
        # oder eigentlich: if (count($_pos) == 1), denn es darf ja nur einen Wert geben oder keinen

      $keypos = $_pos[0];
        }
        else
        {
            ## mix gefunden
        }

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
  2. Hallo!

    (...)ich möchte nun wissen, an welcher Position z.B. der Schlüssel "mrz" im Array steht.
    Gibt es da eine "fertige" Funktion? Ich könnte das Problem auch mit einer Schleife lösen, aber rein Interesse halber frag ich.

    Wenn es tatsächlich dieses Array ist, kannst du doch davon ausgehen, dass der März _immer_ an dritter Stelle steht, oder? Wozu also eine Schleife?

    Für den Fall, dass das nur ein Beispiel war plädier ich auch für array_keys().

    Grüße, Matze

    1. Hallo

      »» (...)ich möchte nun wissen, an welcher Position z.B. der Schlüssel "mrz" im Array steht.

      Wenn es tatsächlich dieses Array ist, kannst du doch davon ausgehen, dass der März _immer_ an dritter Stelle steht, oder?

      Wo ist bei einem assoziativen Array der Zähler? *Wenn* das Array nicht aus irgendwelchen Gründen umsortiert wurde, befinden sich die Elemente natürlich an der Position, an der sie notiert wurden. bei einem Array mit Monatsnamen _kann_ man davon ausgehen, dass sie in ihrer natürlichen Reihenfolge notiert wurden, aber ob das in anderen Fällen genauso ist, ist nicht sicher (falls es dann überhaupt eine "natürliche Reihenfolge" gibt).

      Meiner Meinung nach steht der Schlüssel "mrz" an der "Position" (wenn man das überhaupt so nennen kann) "mrz". Das mag nicht hilfreich sein, aber so sagt es mir mein Verständnis von assoziativen Arrays. Wer einen Zähler haben will, soll ihn in das Array einfügen.

      z.B. so:

      $monatsnamen = array(  
      "jan"=>array("zaehler"=>1,"name"=>"Januar"),  
      // weitere Elemente  
      );  
        
      echo $monatsname["jan"]["zaehler"];  
      // Ausgabe: 1
      

      Tschö, Auge

      --
      Die deutschen Interessen werden am Liechtenstein verteidigt.
      Veranstaltungsdatenbank Vdb 0.3
      1. Hello,

        Meiner Meinung nach steht der Schlüssel "mrz" an der "Position" (wenn man das überhaupt so nennen kann) "mrz". Das mag nicht hilfreich sein, aber so sagt es mir mein Verständnis von assoziativen Arrays. Wer einen Zähler haben will, soll ihn in das Array einfügen.

        Das kann man so nicht vereinfachen. Bei PHP-Arrays handelt es sich nicht um geschlossene Speicherbereiche, in denen brav ein Element eines Typs an an seinen Vorgänger gleichen Typs geklebt wird, sondern um Listen und wenn sie denn "mehrdimensional" werden, um Bäume (= geschachtelte Listen).

        In einer verkettenen Liste (so stellet sich das dem Anwendungsprogrammierer dar, wie es hintenrum wirklich aussieht, geht uns hier nichts an) gibt es einen Anfang und ein Ende. Die Elemente innerhalb der Kette haben je einen Vorgänger und einen Nachfolger, natürlich mit Ausnahme der beiden Ränder...

        Welchen Wert jedes Element trägt, ist vollkommen wurscht. Welchen Index jedes Element trägt, ist auch wurscht, mit der einzigen Bedingung: er darf in der Kette nicht doppelt vorkommen. Da wir aber nicht direkt auf die Knoten zugreifen können, sondern nur über von PHP bereitgestellte Funktionen auf die zugehörigen Elemente, können wir davon ausgehen, dass PHP sich darum kümmert.

        Die Reihenfolge der Indexe in einem solchen "eindimensionalen Array" kann also vollkommen wirr sein, anders als es bei einem typenreinen "echten" Array (Assembler oder Compilersprache) der Fall ist. Dort ist der Index immer direkt proportioanl zum Displacement des Elements innerhalb des Arrays.

        Es ist also durchaus relevant, danach zu fragen, an welcher Position ein Element innerhalb eines Arrays steht. Schließlich richtet sich auch die Abarbeitungsreihenfolge von foreach() und anderen zeigerbasierten Arrayfunktionen danach.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
      2. Hallo,

        zu Toms Erläuterung noch der Zusatz, dass es, wie in deinem Beispiel, unlogisch wäre den ersten Eintrag mit "1" zu kennzeichnen.

        Ein Array in PHP beginnt bei 0, zusätzlich einen Zeiger "1" zu vergeben ist so überflüssig wie falsch.

        Grüße, Matze

        1. Hallo

          zu Toms Erläuterung noch der Zusatz, dass es, wie in deinem Beispiel, unlogisch wäre den ersten Eintrag mit "1" zu kennzeichnen.

          Ein Array in PHP beginnt bei 0, zusätzlich einen Zeiger "1" zu vergeben ist so überflüssig wie falsch.

          hehe, richtig. Ich war quasi im Monatsarray gefangen. :-)

          Tschö, Auge

          --
          Die deutschen Interessen werden am Liechtenstein verteidigt.
          Veranstaltungsdatenbank Vdb 0.3