berdn: Definieren Assoziativen Array, Stilfrage

Hallo Forum,

bevor ich mir einen Unsinn angewöhne, wie definiere ich den verständlich
einen assoziativen Array ?
a.)

$Pflichtfeld = array ("Name"     => "Ja",
                      "eMail"    => "Nein",
                      "Homepage" => "Nein",
                      "Text"     => "Ja");

oder

b.)
$Pflichtfeld["Name"] = "Ja";
$Pflichtfeld["eMail"] = "Nein";
$Pflichtfeld["Homepage"] = "Nein";
$Pflichtfeld["Text"] = "Ja";

habe mir gerade unten den Beispiel Text zusammengeklaubt.

Grüsse,

Bernd

  1. Hi Bernd,

    a.) (also mit dem array() Konstrukt)

    Gruss,
      Carsten

    1. Hallo und Danke für die Antworten,

      ich habe es jetzt so verstanden das in meiner Version b.) die Erzeugnung des Array gefehlt hat, und es von daher nicht so dolle war.
      Jetzt wo ich mir die Sache mit ein paar Stunden Abstand ansehe, werde ich wohl in Zukunft folgende Lösung wählen:

      $_Pflichtfeld = array (
       'Name'     => 'Ja',
       'eMail'    => 'Nein',
       'Homepage' => 'Nein',
       'Text'     => 'Ja',
      );

      Sieht übersichtlich aus, und die Kennzeichnung des Array mit einen Unterstrich klingt sinnig.

      Berdn

      1. Hello,

        $_Pflichtfeld = array (
        'Name'     => 'Ja',
        'eMail'    => 'Nein',
        'Homepage' => 'Nein',
        'Text'     => 'Ja',
        );

        Sieht übersichtlich aus, und die Kennzeichnung des Array mit einen Unterstrich klingt sinnig.

        Man sollte alles tun, was die leichte Lesbarkeit des Codes Unterstützt.

        $_Pflichtfeld = array
        (
          'Name'     => 'Ja',
          'eMail'    => 'Nein',
          'Homepage' => 'Nein',
          'Text'     => 'Ja',
        );

        Dazu gehört es eigentlich auch, dann noch die öffnende Klammer auf die nächste Zeile zu zeiehen.
        Dadurch entsteht eine "Leerzeile", die den namen des Konstrukts wie eine Überschrift erscheinen lässt. Es gibt da zwar unterschiedliche Philosophien, aber meine Lesbarkeitstests in diversen Kursen haben immer das Ergebnis gebracht, dass die obige Schreibweise die wenigsten Lesefehler erbrachte.

        Die Bübdigkeit der '=>' hast Du ja schon eingeführt. Auch das trägt zur Lesbarkeit bei.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Hello,

          sorry, noch ein hässlicher Fehler steckt drin:

          $_Pflichtfeld = array
          (
            'Name'     => 'Ja',
            'eMail'    => 'Nein',
            'Homepage' => 'Nein',

          'Text'     => 'Ja',

          );

          ^
                                |
                                +---- Das Komma muss natürlich weg...

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Huhu Tom

            sorry, noch ein hässlicher Fehler steckt drin:

            Nö, das ist kein Fehler und macht Sinn wenn man z.B. neue Elemente
            ergänzen oder die Reihenfolge schnell per Copy+Paste umändern möchte.

            <quote> Having a trailing comma after the last defined array entry, while unusual, is a valid syntax.</quote>

            http://www.php.net/manual/en/function.array.php

            Viele Grüße

            lulu

            --
            bythewaythewebsuxgoofflineandenjoytheday
            1. Hello,

              Nö, das ist kein Fehler und macht Sinn wenn man z.B. neue Elemente
              ergänzen oder die Reihenfolge schnell per Copy+Paste umändern möchte.

              <quote> Having a trailing comma after the last defined array entry, while unusual, is a valid syntax.</quote>

              http://www.php.net/manual/en/function.array.php

              Danek für den Hinweis. Wäre mir allerdings lieber, dass das bei SQL erlaubt wäre ;-)

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. Huhu Tom

                Danke für den Hinweis. Wäre mir allerdings lieber, dass das bei SQL erlaubt wäre ;-)

                Das habe ich mir auch schon oft gewünscht.

                Wobei das mit dem "trailing" Komma in Array-Definitionen ggf. auch
                mehr Verwirrung als Nutzen stiftet.

                Viele Grüße

                lulu

                --
                bythewaythewebsuxgoofflineandenjoytheday
            2. Hi lulu,

              <quote> Having a trailing comma after the last defined array entry, while unusual, is a valid syntax.</quote>

              http://www.php.net/manual/en/function.array.php

              In C ist mir das schon lange vertraut, und in den beschriebenen Fällen mache ich gern Gebrauch davon.
              Schön zu wissen, dass man das in PHP ebenso machen darf.

              Ciao,

              Martin

  2. Huhu Bernd

    bevor ich mir einen Unsinn angewöhne, wie definiere ich den verständlich
    einen assoziativen Array ?

    Verständlich für wen?

    a.)

    $Pflichtfeld = array ("Name"     => "Ja",
                          "eMail"    => "Nein",
                          "Homepage" => "Nein",
                          "Text"     => "Ja");

    Das ist doch schon recht übersichtlich.

    Ich bevorzuge meist diese Schreibweise:

    $Pflichtfeld = array (

    'Name'     => 'Ja',
     'eMail'    => 'Nein',
     'Homepage' => 'Nein',
     'Text'     => 'Ja',
    );

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
  3. Hallo,

    bevor ich mir einen Unsinn angewöhne, wie definiere ich den verständlich
    einen assoziativen Array ?

    Beides ist korrekt, wobei ich Variante a) übersichtlicher und irgendwie eleganter finde.

    Ciao,

    Martin

  4. Hello,

    bevor ich mir einen Unsinn angewöhne, wie definiere ich den verständlich
    einen assoziativen Array ?
    a.)

    $Pflichtfeld = array ("Name"     => "Ja",
                          "eMail"    => "Nein",
                          "Homepage" => "Nein",
                          "Text"     => "Ja");

    oder

    b.)
    $Pflichtfeld["Name"] = "Ja";
    $Pflichtfeld["eMail"] = "Nein";
    $Pflichtfeld["Homepage"] = "Nein";
    $Pflichtfeld["Text"] = "Ja";

    Die beiden Varianten sind keinesfalls identisch!
    PHP verwendet die implizite Variablendeklaration, dass bedeutet, dass bei a) die Variable $Pflichtfeld als Array neu angelegt oder, falls sie bereits vorhanden war, mit einem "Array" [1] überschrieben wird.

    Bei Variante b) werden aber in dieser Schreibweise nur die Subelemente ['Name'], ['eMail'] ... neu belegt. Das funktioniert aber nur, wenn $Pflichtfeld bereits als Array vorhanden ist, oder noch gar nicht deklariert war. Es funktioniert nicht, wenn $Pflichtfeld z.B. schon als String-Variable vorhanden ist.

    Die vollständige Deklaration b) müsste also lauten (ich führe gleich mal meine Schreibweise ein):

    $_pflichtfeld = array();
    $_pflichtfeld['name'] = 'Ja';
    $_pflichtfeld['email'] = 'Nein';
    $_pflichtfeld['homepage'] = 'Nein';
    $_pflichtfeld['text'] = 'Ja';

    in der ersten Zeile wird die Variable 1. Ordnung angelegt oder, falls sie vorhanden war, freigegeben und als Array neu angelegt.
    Ich kennzeichne Array-Variablen seit einiger Zeit mit einem $_ und Objekte mit $__
    Das hat sich bewährt. Die übliche Notation mit dem vorangestellten Typ  habe ich mir bei PHP abgewöhnt, da man durch die automatische Typumwandlung ohnehin nur noch zwischen Skalaren und Strukturen ("Arrays" und Spezial-Typen) unterscheidet.
    Die "kleinen" Häkchen reichenvollkommen aus. Die Strings müssen ja nicht mehr geparst werden.

    [1] Arrays sind in PHP eigentlich verkettete Listen oder Bäume. Sie stellen keinen geschlossenen Speicherbereich dar, sondern im Speicher verteilte Objekte, die jedes auch unterschiedliche Typen tragen können.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau