Jens: Brett vor dem Kopf

Guten Tag,

ich habe momentan einen Aussetzer.
Könnte mir bitte jemand sagen wie die folgende Zeile richtig heißen muss?

$row['d_language'] = $row['d_"$language"'];

oder so:

$row['d_language'] = $row['d_.$language];

Die Zeile sollen einen assoziateven Index umbenennen, da er für eine Schablone benötigt wird.

Danke

  1. Moin!

    $row['d_language'] = $row['d_"$language"'];
    oder so:
    $row['d_language'] = $row['d_.$language];

    Mal überlegen:

    Das, was da als Assoziation dienen soll  besteht offensichtlich aus:

    "d_" und $language.

    Also: 'd_'.$language  oder "d_".$language oder "d_$language"

    In der Variable sieht das dann etwa so aus:
    $row['d_language'] = $row['d_'.$language];

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
    1. Guten Tag fastix®,

      ja, so ist es richtig.
      Noch eine Frage ...

      Wann kann man denn bei einem ass. Array, z.B $row['alter'] die Gänsefüsschen weglassen : $row[alter]?

      Warum geht beides?
      Was, wann wo verwenden?

      Danke

      1. Hallo,

        Wann kann man denn bei einem ass. Array, z.B $row['alter'] die Gänsefüsschen weglassen : $row[alter]?

        Warum ist $foo[bar] falsch?
        http://www.php.net/manual/de/language.types.array.php#language.types.array.foo-bar
        Ausnahme: Innerhalb von _doppelten_ Anfuehrungszeichen. "$foo[bar]" ist erlaubt:
        http://www.php.net/manual/en/language.types.array.php#AEN3791

        Gruesse,

        Thomas

        1. Moin!

          He! Das war meine Frage! Ich! Ich! Ich will zuerst berühmt werden!

          :)))

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix®

          --
          Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
        2. Hello,

          Ausnahme: Innerhalb von _doppelten_ Anfuehrungszeichen. "$foo[bar]" ist erlaubt:
          http://www.php.net/manual/en/language.types.array.php#AEN3791

          ...also überall da, wo Konstanten nicht als solche interpretiert werden, darf man die Anführungszeichen und den Index weglassen *?!..*

          Oder?

          Grüße

          Tom

          1. Hi,

            ja - sozusagen. Du kannst den Index einfach schreiben wie eine Konstante - sobald die Konstante nicht definiert ist, wird der Index einfach genommen, wie wenn er in " stehen würde...

            ABER: Dieses Verhalten erzeugt je nach Konfigration eine Notice, und kann mit jeder neuen PHP-Version als "echter" Fehler eingestuft werden. Zur Sicherheit würde ich an deiner Stelle die Anführungszeichen nie weglassen! Was würdest du beispielsweise machen, falls dein String ohne " plötzlich als Konstante auftauchen würde?

            Genauere Beschreibungen findest du in der PHP-Dokumentation (Beispiel mit dem $foo[bar])

            E7

          2. Hallo,

            Ausnahme: Innerhalb von _doppelten_ Anfuehrungszeichen. "$foo[bar]" ist erlaubt:
            http://www.php.net/manual/en/language.types.array.php#AEN3791
            ...also überall da, wo Konstanten nicht als solche interpretiert werden, darf man die Anführungszeichen und den Index weglassen *?!..*

            "Duerfen" ist der falsche Ausdruck. Es ist und bleibt falsch, und "funktioniert"
            nur dank der Fehlertoleranz von PHP. Diese koennte sich irgendwann mal aendern.

            Noch zur Ergaenzung: Die Beispiele im englischen Manual sind ganz nuetzlich:
            http://www.php.net/manual/en/language.types.string.php#AEN3553

            Korrekt: echo "Blabla $foo[bar] Blabla";
            Korrekt: echo "Blabla {$foo['bar']} Blabla";

            Falsch: echo "Blabla $foo['bar'] Blabla";
              (gibt in neuen PHP-Versionen einen Parsing Error)
            Falsch: echo "Blabla {$foo[bar]} Blabla";
              (das letzte Beispiel "funktioniert" aber dank obengenannter Toleranz)

            Gruesse,

            Thomas

          3. Hi,

            wisst ihr, an was mich das erinnert? An Visual Basic:

            Dim I as String
            For I = 1 to 10
            '...
            Next I

            Ist zwar auch möglich, aber nicht sonderlich sinnvoll...

            E7

            PS: Auch wenn der Vergleich hinkt - grundsätzlich falsch ist das nicht

      2. Moin!

        Wann kann man denn bei einem ass. Array, z.B $row['alter'] die Gänsefüsschen weglassen : $row[alter]?

        [pref:t=62408&m=353189]
        (Hat wasaga schon beschrieben...)

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
      3. Hi,

        du kannst diese weglassen, wenn du das ganze innerhalb einen Strings machst ("$foo[bar]") oder, sobald alter als Konstante definiert ist

        define(ALTER, 18);

        E7

  2. Hallo,

    $row['d_language'] = $row['d_"$language"'];
    oder so:
    $row['d_language'] = $row['d_.$language];

    Weder noch. Moegliche Loesungen hat Dir fastix schon genannt.

    Damit Du sie verstehst, empfehle ich Dir folgendes zur Lektuere:

    PHP-Manual: Zeichenketten-Operatoren.
    http://www.php.net/manual/de/language.operators.string.php

    PHP-Manual: Strings, Einfache und doppelte Anfuehrungszeichen, HEREDOC-Syntax,
    http://www.php.net/manual/de/language.types.string.php
    Abschnitt davon:
    Variablen-Analyse (parsing) in Strings:
    http://www.php.net/manual/de/language.types.string.php#language.types.string.parsing

    dclp-FAQ: Anführungzeichen oder Hochkomma?
    http://www.dclp-faq.de/q/q-stil-anfuehrungszeichen.html

    Gruesse,

    Thomas