Jani: echo bei Arrays

Hallo,

ich bin über Google hier gelandet. Ich hoffe das Ihr mir helfen könnt. Mein Problem ist das ich gerne aus dem Array die 6 Katzen anzeigen möchte

Array  
(  
    [0] => Array  
        (  
            [Katzen] => 6  
            [Hunde] => 9  
        )  
    [1] => Array  
        (  
            [Katzen] => 7  
            [Hunde] => 16  
        )  
)

Was wäre dann richtig?

$hunde_katzen[0][Katzen]

Danke Jani

  1. Hello,

    ich bin über Google hier gelandet. Ich hoffe das Ihr mir helfen könnt. Mein Problem ist das ich gerne aus dem Array die 6 Katzen anzeigen möchte

    Array

    (
        [0] => Array
            (
                [Katzen] => 6
                [Hunde] => 9
            )
        [1] => Array
            (
                [Katzen] => 7
                [Hunde] => 16
            )
    )

    
    > Was wäre dann richtig?  
    >   
    > `$hunde_katzen[0][Katzen]`{:.language-php}  
      
    Ist schon fast richtig. Die Elementbezeichner werden pro Ebene einfach nur angereiht.  
    Das "echo" darfst Du natürlich nicht vergessen, sonst wird der Inhalt des refernzierten Elementes selbst als Befehl behandelt.  
      
    Alphanumerische Elementbezeichner werden als Strings angegeben.  
      
    Außedfem musst Du bei der Ausgabe immer den Kontext beachten.  
    <http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel>  
      
      
    Im HTML-Umfeld:  
      
    ~~~php
      
    echo htmlspecialchars('Katzen: ' . $hunde_katzen[0]['Katzen']);  
    
    

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hi!

      Das "echo" darfst Du natürlich nicht vergessen, sonst wird der Inhalt des refernzierten Elementes selbst als Befehl behandelt.

      Nein, dazu bräuchte es immer noch eval(). Der Ausdruck wird berechnet (der Inhalt (6) wird ermittelt) aber mit dem Ergebnis passiert nichts.

      Lo!

      1. Hello,

        Das "echo" darfst Du natürlich nicht vergessen, sonst wird der Inhalt des refernzierten Elementes selbst als Befehl behandelt.

        Nein, dazu bräuchte es immer noch eval(). Der Ausdruck wird berechnet (der Inhalt (6) wird ermittelt) aber mit dem Ergebnis passiert nichts.

        Hast Du es ausprobiert?

        <?php   ### function_reference.php ###
        ##          array of functions

        function show_string($arg)
        {
          echo "<p>Hallo $arg</p>";
        }
        #-------------------------------

        $text = 'show_string';
        $text ('so gehts richtig');

        $text ('und sogar zweimal');

        $_func = array();
        $_func[1] = 'show_string';

        $_func[1]('auch mit Arrays?');
        $_func[1]('sogar mit Arrays!');

        ?>

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hi!

          Das "echo" darfst Du natürlich nicht vergessen, sonst wird der Inhalt des refernzierten Elementes selbst als Befehl behandelt.
          Nein, dazu bräuchte es immer noch eval(). Der Ausdruck wird berechnet (der Inhalt (6) wird ermittelt) aber mit dem Ergebnis passiert nichts.
          Hast Du es ausprobiert?
          $text = 'show_string';
          $text ('so gehts richtig');

          Damit behandelst du nicht den Inhalt als "Befehl", sondern den Inhalt plus weitere syntaktische Elemente, so dass letzlich der Inhalt den Funktionsnamen bildet. Der Inhalt allein wird damit immer noch nicht ausgeführt.

          Lo!

          1. Hello,

            Damit behandelst du nicht den Inhalt als "Befehl", sondern den Inhalt plus weitere syntaktische Elemente, so dass letzlich der Inhalt den Funktionsnamen bildet. Der Inhalt allein wird damit immer noch nicht ausgeführt.

            Stimmt, die Klammern machen den Unterschied!
            Wäre sonst auch beängstigend, wenn Literale in Variablen sofort ausgeführt würden.

            --------------
            Anderes Thema:

            Das hatte ich Dir eben schon mal geantwortet, und schon wieder ist das Posting verschwunden.
            Entweder habe ich wirklich was ganz Schlimmes auf meinem Host, oder aber die Forensoftware hat doch 'ne Macke.

            Es wurde mir ja angezeigt als gepostet.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Hi!

              Irgendwann mache ich mich noch unbeliebt, wenn ich ständig die Begrifflichkeiten sortiere ...

              Wäre sonst auch beängstigend, wenn Literale in Variablen sofort ausgeführt würden.

              Sicher nur eine unbedachte Formulierung deinerseits, aber ein Literal ist die Darstellung eines Wertes mit Hilfe von Code. In einer Variable steht eine für die interne Verarbeitung günstige Form des Wertes, aber üblicherweise kein Literal.

              Das Literal der Zahl 42 sind die Zeichen für die Ziffern 4 und 2 hintereinandergeschrieben. In einer (Integer-)Variable steht irgendeine Binärdarstellung der Zahl.

              Ein Literal der Zeichenfolge foo"bar wäre "foo"bar". Der \ und die umschließenden Anführungszeichen sind nur Bestandteil des Literals, damit der Code, in dem es steht, korrekt geparst werden kann. Wenn die mit dem Literal gemeinte Zeichenfolge in einer Variable steht, sind die zusätzlichen Zeichen bestenfalls überflüssig.

              Lo!

              1. Hello,

                Irgendwann mache ich mich noch unbeliebt, wenn ich ständig die Begrifflichkeiten sortiere ...

                Ooch, im Moment ist ein bisschen Denksport ganz hilfreich, um wieder fit zu werden. Die Grippe will einfach nicht zu Ende gehen :-(

                Wäre sonst auch beängstigend, wenn Literale in Variablen sofort ausgeführt würden.

                Sicher nur eine unbedachte Formulierung deinerseits,

                Wahrscheinlich. Unter Literal verstehe ich die menschlich lesbare Darstellung eines Wertes, die meistens abhängig von der verwendeten (Programmier-)Sprache ist.

                aber ein Literal ist die Darstellung eines Wertes mit Hilfe von Code. In einer Variable steht eine für die interne Verarbeitung günstige Form des Wertes, aber üblicherweise kein Literal.

                Naja, das ist jetzt wirklich Philosophie. Das Literal A meint i.d.R. schon das Zeichen A, es sei denn ...

                Das Literal der Zahl 42 sind die Zeichen für die Ziffern 4 und 2 hintereinandergeschrieben. In einer (Integer-)Variable steht irgendeine Binärdarstellung der Zahl.

                Klar, und was käme heraus, wenn man '42' oder 42 oder 000101010 ausführen lassen wollte? ;-P

                In diesem Falle (bei Verwendung als Funktionsname) steht ja in der Variablen wieder nur ein Name, keine Adresse für den Code-Pointer. Dieser Name wird für die Ausführung wieder als Literal (im speziellen Kontext) verwendet, um den passenden Punkt in der Symbol-Tabelle zu finden.

                Das war ja mein Denkfehler. Erst durch die Klammern wird der enthaltene Wert zum Symbol.

                Ein Literal der Zeichenfolge foo"bar wäre "foo"bar". Der \ und die umschließenden Anführungszeichen sind nur Bestandteil des Literals, damit der Code, in dem es steht, korrekt geparst werden kann. Wenn die mit dem Literal gemeinte Zeichenfolge in einer Variable steht, sind die zusätzlichen Zeichen bestenfalls überflüssig.

                Ich werde wohl noch ein Weilchen darüber grübeln und die durchaus sehr abweichenden Begriffsbestimmungen einschlägiger Literatur darüber vergleichen.

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                 ☻_
                /▌
                / \ Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
                1. Hi!

                  Unter Literal verstehe ich die menschlich lesbare Darstellung eines Wertes, die meistens abhängig von der verwendeten (Programmier-)Sprache ist.

                  Fast. Der Code-Parser muss es lesen können. Für den Menschen ist es lesbar, wenn er die Besonderheiten der Literale der jeweiligen Programmiersprache kennt - vor allem Quotier- und Maskierregeln -, damit er weiß, für welchen Wert das Literal steht.

                  aber ein Literal ist die Darstellung eines Wertes mit Hilfe von Code. In einer Variable steht eine für die interne Verarbeitung günstige Form des Wertes, aber üblicherweise kein Literal.
                  Naja, das ist jetzt wirklich Philosophie. Das Literal A meint i.d.R. schon das Zeichen A, es sei denn ...

                  Das ist auch praktisch relevant, wenn man sich vorstellen will, was intern abläuft. Von einer Abstraktionsebene weiter oben geschaut, kann man schon sagen, dass da ein A in der Variable steht, aber tatsächlich ist es üblicherweise nicht als Zeichen sondern in einer kodierten Form abgelegt. Es geht aber nicht nur um einzelne Buchstaben. Der Unterschied zwischen Literal und Wert kommt vor allem dann zum Vorschein, wenn mehrdeutige Zeichen verwendet werden, wie Anführungszeichen.

                  Außerdem, ist das Literal des Zeichens A unter PHP nicht A sondern 'A' oder "A" oder "\x41" oder "\0101" (plus viele weitere Möglichkeiten, wenn man die Heredoc- oder Nowdoc-Syntax hinzunimmt). Die Anführungszeichen gehören bei Strings zum Literal, damit man es von Bezeichnern unterscheiden kann.

                  Klar, und was käme heraus, wenn man '42' oder 42 oder 000101010 ausführen lassen wollte? ;-P

                  Ist nicht weiter relevant, weil es nicht geht.

                  In diesem Falle (bei Verwendung als Funktionsname) steht ja in der Variablen wieder nur ein Name, keine Adresse für den Code-Pointer. Dieser Name wird für die Ausführung wieder als Literal (im speziellen Kontext) verwendet, um den passenden Punkt in der Symbol-Tabelle zu finden.

                  Der Wert wird zum Finden der Funktion mit diesem Namen verwendet. Ein Literal spielt dabei keine Rolle, weil du ja foo() aufrufen willst und nicht "foo"(). Es werden keine Begrenzungszeichen benötigt, um den Funktionsnamen zu finden. Ein String-Literal unter PHP hat jedoch welche (Heredoc und Nowdoc nicht weiter beachtet).

                  Lo!

  2. Hi!

    Mein Problem ist das ich gerne aus dem Array die 6 Katzen anzeigen möchte
    $hunde_katzen[0][Katzen]

    Was für ein Ergebnis bekommst du und welches erwartest du?

    Übrigens: Why is $foo[bar] wrong?

    Lo!

  3. Hi,

    Array

    (
        [0] => Array
            (
                [Katzen] => 6
                [Hunde] => 9
            )
        [1] => Array
            (
                [Katzen] => 7
                [Hunde] => 16
            )
    )

      
    
    > Was wäre dann richtig?  
    > `$hunde_katzen[0][Katzen]`{:.language-php}  
      
    fast richtig - das würde durch die interne Fehlerkorrektur von PHP zwar funktionieren, ist aber nicht ganz korrekt und wirft deshalb auch eine Notice.  
    Die Ausgabe von print\_r() ist hier etwas irreführend. Sie berücksichtigt nicht, dass die Unterschlüssel Strings sind und auch als solche notiert werden sollten.  
      
    Ciao,  
     Martin  
    
    -- 
    Realität ist eine Illusion, die durch Unterversorgung des Körpers mit Alkohol entstehen kann.  
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(