Ankündigung

Einklappen
Keine Ankündigung bisher.

Auf Arrayelement aus Funktion direkt zugreifen???

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Auf Arrayelement aus Funktion direkt zugreifen???

    Hi all,

    Wenn eine Funktion ein Array zurückliefert und ich dann auf ein Element dieses Ergebnis-Arrays zugreifen will, geht das auch in einer Zeile ohne Zwischenspeicherung?

    --> so gehts ...
    PHP-Code:
    $Arr = function();
    $EinElement $Arr[0]; 

    --> so hätte ich es gerne ...
    PHP-Code:
    $EinElement = function()[0]; 
    Bei anderen Sprachen geht das z.B. so: $EinElement = function().[0]

    da gibt's doch in PHP bestimmt auch einen Trick??

    1000 Dank!
    jwka61
    Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

  • #2
    Leider nein. Falls doch jemand einen kennt, würde er mich brennend interessieren

    Ergänzung: Wenn es um das erste oder letzte Element geht handhabe ich das i.d.R. so:

    PHP-Code:
    $erstesElement reset(eineFunktion());
    // bzw.:
    $letztesElement end(eineFunktion()); 
    [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
    [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

    Kommentar


    • #3
      Danke für die Antwort! Bin ich ja doch nicht sooo doof.

      Leider geht's be mir mit reset & end nicht - das Array ist mit String-Indices und "mein" Item ist irgendwo in der Mitte ...

      Wenn doch noch jemand nen Trick hat ... ich brenne (auch) darauf!

      jwka
      Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

      Kommentar


      • #4
        PHP-Code:
        $key 'meins';
        $array = array(
          
        'deins' => '13123',
          
        'meins' => '332342',
          
        'seins' => '342424',
          
        'ihrs'  => 'sdasd'
        );
        var_dump(array_keys($array$key));
        var_dump(array_key_exists($key$array)); 
        PHP: array_keys - Manual
        PHP: array_key_exists - Manual

        Mit diesen 2 Methoden sollten sich deine Probleme in Luft auflösen

        Edit:
        olololol. Ach ich glaube jetzt gerafft zu haben was du wills. Ähm mir ist nicht bekannt, dass so etwas geht. Aber normalerweise kannst du mit end() und reset() auch mit nicht nummerisches Indexen arbeiten.
        "My software never has bugs, it just develops random features."
        "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

        Kommentar


        • #5
          Wie meinst du das? Der zweite Parameter von array_keys dient doch zur Suche nach Werten.
          [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
          [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

          Kommentar


          • #6
            tja, es scheint eine Funktion zu fehlen, wie

            arr_val( index )

            na ja, meist reicht ja auch $Array[ index ], nur in meinem speziellen Falle, in den das Array als Rückgabe einer Funktion geliefert wird, ich aber nur einen bestimmten Wert benötige, brauch ich dann zwei Zeilen.

            Schade ...

            jwka
            Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

            Kommentar


            • #7
              Wenn Du unbedingt einen Schritt sparen willst bastel Dir ne eigene Funktion:
              PHP-Code:
              function array_get_from_func($callback_array=false$offset=0) {
                
              $element = (is_array($callback_array))? array_slice($callback_array$offset1): false;
                return (
              $element)? $element[0]: false;
              }

              // Einzeiliger Aufruf (schematisch):
              $EinElement array_get_from_func(function(), 5); 
              Nicht getestet, sollte aber funktionieren.
              Competence-Center -> Enjoy the Informatrix
              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

              Kommentar


              • #8
                Warum einfach, wenns auch kompliziert geht?

                PHP-Code:
                function array_offset(array $array$offset) {
                    return 
                $array[$offset];
                }

                $einElement array_offset(eineFunktion(), 5); 
                Edit: funktioniert so vor allem auch mit assoziativen Arrays
                PHP-Code:
                $einElement array_offset(eineFunktion(), 'key'); 
                [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
                [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

                Kommentar


                • #9
                  Jo, hast natürlich generell recht. Aber wenn ich schon ne eigene Funktion bastel, möchte ich auch den Rückgabewert und fehlerhafte Parameterübergaben kontrollieren.

                  EDIT
                  funktioniert so vor allem auch mit assoziativen Arrays
                  Das würde es bei mir auch...
                  Competence-Center -> Enjoy the Informatrix
                  PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                  Kommentar


                  • #10
                    Dass ich das "basteln" kann, war mir schon klar.

                    Aber da ist dann das umspeichern in ein Array und dieses auszulesen in meinem Falle einfacher - ich wollte ja um das explizite weitere Array rum kommen.

                    Werde mal dem Hersteller der Funktion vorschlagen, eine "Properties-Funktion" zur Verfügung zu stellen, an die man den Key direkt übergeben kann.

                    Danke an alle.
                    jwka61
                    Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

                    Kommentar


                    • #11
                      ich wollte ja um das explizite weitere Array rum kommen.
                      Ein Array wird von der Funktion so oder so generiert. Ob DU nun eine Funktion bastelst oder der Entwickler eine Möglichkeit implementiert, kommt imho aufs gleiche heraus.
                      Competence-Center -> Enjoy the Informatrix
                      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                      Kommentar


                      • #12
                        Zitat von Arne Drews Beitrag anzeigen
                        Jo, hast natürlich generell recht. Aber wenn ich schon ne eigene Funktion bastel, möchte ich auch den Rückgabewert und fehlerhafte Parameterübergaben kontrollieren.

                        EDIT
                        Das würde es bei mir auch...
                        Okay, den Parameter-Check geb ich dir, array_slice ist trotzdem Overkill

                        @jwka61: Wenn du dir um Performance Sorgen machst weil das Array zusätzlich in einer Variable gespeichert wird: Das musst du dank copy-on-write nicht, PHP speichert i.d.R. nichts doppelt.
                        [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
                        [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

                        Kommentar


                        • #13
                          array_slice ist trotzdem Overkill
                          Stimmt, für diesen Fall ja!
                          Competence-Center -> Enjoy the Informatrix
                          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                          Kommentar


                          • #14
                            Es geht mir an dieser Stelle eigentlich eher um Code-Kompaktheit.

                            Ich würde mal sagen: Für mich ist dei Sache erstmal geklärt, ich muss mit den zwei zusätzlichen Zeilen Code leben.

                            Danke für Eure Hilfe!
                            jwka
                            Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

                            Kommentar


                            • #15
                              $EinElement = function().[0]
                              Kannst ja Objekte benutzen. Genau genommen ist das oben nämlich auch eine Objektnotation.

                              $EinElement = $whatever->function()->item(0);
                              [COLOR="#F5F5FF"]--[/COLOR]
                              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                              [COLOR="#F5F5FF"]
                              --[/COLOR]

                              Kommentar

                              Lädt...
                              X