Ankündigung

Einklappen
Keine Ankündigung bisher.

Array-Bibliothek mit fehlenden Funktionen gesucht

Einklappen

Neue Werbung 2019

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

  • Array-Bibliothek mit fehlenden Funktionen gesucht

    Moin,

    bevor ich jetzt selbst was anfange:
    Ich suche eine Bibliothek, die verschiedene Array-Funktionen zur Verfügung stellt. Würde ich das jetzt selbst bauen, würden da unter anderem folgende Funktionen reinkommen:

    PHP-Code:
    arr/intersect($array$values);
    arr/intersectKeys($array$keys);
    arr/diff($array$values);
    arr/diffKeys($array$keys);
    arr/filter($array$callable$includeKeys false);
    arr/filterKeys($array$callable$includeValues false);
    arr/map($array$callable$includeKeys false);
    arr/mapKeys($array$callable$includeValues false);
    arr/mapRecursive($array$callable$maxDepth null$includeKeys false);
    arr/mapKeysRecursive($array$callable$maxDepth null$includeKeys false);
    arr/has($array$key);
    arr/get($array$key$default null);
    arr/set($array$key$value);
    arr/group($array$callable$maxDepth=null); 
    Meine Frage jetzt: Kennt jemand eine Bibliothek, wo ähnliche Funktionen bereits implementiert sind? Müssen natürlich nicht alle sein.
    Standards - Best Practices - AwesomePHP - Guideline für WebApps


  • #2
    Ziemlich viele davon sind doch schon im Standardumfang von PHP?!

    http://de3.php.net/manual/en/ref.array.php
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Von Namen her ja, richtig.
      Standards - Best Practices - AwesomePHP - Guideline für WebApps

      Kommentar


      • #4
        Ja gut, was soll man sonst antworten

        Wenn wir nicht wissen, was Deine Funktionen im Detail machen, kann man sich nur an der Benennung orientieren.
        Die einzige sinnvolle Antwort in diesem Fall ist die von tkausl.
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          ArrayObject würde eine gute Basis liefern für das was du bauen/haben willst.
          [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

          Kommentar


          • #6
            Ok, ich hatte angenommen, dass das Thema selbsterklärend ist.

            PHP hat ein gewisses Grundrepertoire an array-funktionen. Ich merke bei meiner täglichen Arbeit immer wieder, dass die Basisfunktionen sehr oft nicht ausrechen, bzw blöd design't sind:
            array_map($func, $array)/array_filter($array, $func)

            Ausserdem habe ich es sehr oft, dass die Array-Funktionen nicht das tut, was ich gerne tun würde.

            Beispiele:
            • Ich habe ein Array "A" mit Werten und würde gerne alle Keys da rauswerfen, die nicht als Value im Array "B" auftauchen. Spiel mit Intersect.
            • Ich habe ein Array, bei dem ich Keys rausfiltern will.
            • Ich habe ein Array, bei dem ich Keys mappen will.
            • Ich habe ein hierachisches Array, bei dem ich auf den möglicherweise nicht vorhandenen Wert des Keys "[x][y][z]" zugreifen will und wenn es diesen nicht gibt, möchte ich einen Defaultwert.
            • Ich möchte anhand eines Sub-Keys gruppieren (wie array_column + sowas wie "array_reduce").


            und, und, und...

            Zitat von tr0y Beitrag anzeigen
            ArrayObject würde eine gute Basis liefern für das was du bauen/haben willst.
            http://phpfiddle.org/main/code/f9ui-7sjf

            Ich würde arrays gerne array sein lassen. Ich sehe auch keinen Grund darin, alles unbedingt in ein Objekt zu werfen. Ich finde es ok, dass Funktionen, die keinen internen State haben/brauchen, also normale Funktion nutzbar sind. Alles was Code spart, schafft Übersicht.
            Standards - Best Practices - AwesomePHP - Guideline für WebApps

            Kommentar


            • #7
              Und du möchtest dann funktionstetris zwecks mutable product und immutable product spielen ? Viel Spass.

              Array typehinting kann man sich sparen wenn man deren OOP-Äquivalente nutzt bei dem man kontrollieren kann was man übergibt und was bei rauskommen kann. Deine Functions sind im übrigen auch nicht ganz "new age lib"-tauglich ( nix autoloading ).
              [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

              Kommentar


              • #8
                Zitat von tr0y Beitrag anzeigen
                ( nix autoloading ).
                Wie meinst du das?

                https://github.com/rkrx/php-array-utils

                Autoloading: https://github.com/rkrx/php-array-ut...r.json#L18-L23
                Standards - Best Practices - AwesomePHP - Guideline für WebApps

                Kommentar


                • #9
                  array_map($func, $array)/array_filter($array, $func)
                  Zieh Dir mal die Dokumentation beider Funktionen rein, dann siehst Du, warum die Parameterreihenfolge so ist.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Zitat von nikosch Beitrag anzeigen
                    Zieh Dir mal die Dokumentation beider Funktionen rein, dann siehst Du, warum die Parameterreihenfolge so ist.
                    Schon klar. array_map kann ganz viel auf Kosten der Signaturkonsistenz. Zumal wesentlich seltener auf natürlichem Weg zwei (oder mehr) gleichgroße Arrays miteinander verarbeitet werden sollen, als ich auch KeyValue-Array verarbeiten will.

                    Usecase: Ich habe ein (Key<string>, Value<array>)-Array und möchte den Key jeweils in einen Key von Value<array> packen:

                    PHP-Code:
                    $values = ...;
                    $keys array_keys($values);
                    $values array_map(function ($key$value) {
                        
                    $value['id'] = $key;
                        return 
                    $value;
                    }, 
                    $keys$values); 
                    PHP-Code:
                    $values = ...;
                    arr/mapKeysAndValues($values, function ($key$value) {
                        return 
                    arr/set($value'id'$key);
                    }); 
                    Ich verstehe, dass man mit array_map auch andere Fälle leicht abbilden könnte. Aber diese Fälle sind auf meiner Erfahrung eher theoretischer Natur.
                    Standards - Best Practices - AwesomePHP - Guideline für WebApps

                    Kommentar


                    • #11
                      Ich habe ein Array, bei dem ich Keys rausfiltern will.
                      Und das erledigt nicht array_keys()?!
                      Es ist schon alles gesagt. Nur noch nicht von allen.

                      Kommentar


                      • #12
                        Interessant. Schlecht dokumentiert, aber anscheind kann man da auch ein Array übergeben. Ein Grund mehr für eine konsistente Bibliothek.
                        Standards - Best Practices - AwesomePHP - Guideline für WebApps

                        Kommentar


                        • #13
                          @rkr: Hatte erst verstanden, Du willst aus dem Datenfeld die Schlüssel rausfiltern (auslesen). Dann kam mir der Gedanke, dass Du nur bestimmte Schlüssel herausfiltern willst. Nach Schlüsseln bestimmter Werte kann man ja eh filtern laut Doku.

                          Und jetzt kommst Du mit dem Array als Parameter, was ich natürlich nicht gewusst habe.

                          Ich denke, solche Funktionen zu schreiben, wird Dir selbst überlassen, weil das Ganze sonst zu unübersichtlich wird. Und gegen ein Array zu filtern ist ja jetzt nicht der Mega-Code, den man da selber schreiben müsste, wenn es das nicht schon undokumentierterweise gäbe.
                          Es ist schon alles gesagt. Nur noch nicht von allen.

                          Kommentar


                          • #14
                            Zitat von drsoong Beitrag anzeigen
                            @rkr: Hatte erst verstanden, Du willst aus dem Datenfeld die Schlüssel rausfiltern (auslesen). Dann kam mir der Gedanke, dass Du nur bestimmte Schlüssel herausfiltern willst. Nach Schlüsseln bestimmter Werte kann man ja eh filtern laut Doku.
                            Nein, noch weiter. Ich habe eine Map (KeyValue-Array) und will alle Einträge auswerfen, deren Key in einem anderen Array vorhanden ist.

                            https://github.com/rkrx/php-array-ut...ns.php#L50-L56

                            Beispiele hier:

                            https://github.com/rkrx/php-array-utils
                            Standards - Best Practices - AwesomePHP - Guideline für WebApps

                            Kommentar


                            • #15
                              Ähnlich wie: http://php.net/manual/en/function.ar...ersect-key.php ?
                              --

                              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                              --

                              Kommentar

                              Lädt...
                              X