Ankündigung

Einklappen
Keine Ankündigung bisher.

Über Config auf ein immer anderes Element im einem Array zugreifen

Einklappen

Neue Werbung 2019

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

  • Über Config auf ein immer anderes Element im einem Array zugreifen

    Hallo,

    ich hole aus einem Array eine bestimmte Information. Momentan ist das fest einprogrammiert in dieser Art:

    PHP-Code:
    $id $datenModell['privateDaten']['wichtigsteId']; 
    Je nach Anwendungsfall sehen die Daten aber anders aus und die gesuchte Information, die ID liegt ganz woanders und ist samt Pfad auch ganz anders benannt:

    PHP-Code:
    $id $datenModell['eineEbene']['nochEineEbene']['AuchNeId']; 
    Ich muss das dynamisch haben und den (sagen wir Pfad) in einer Konfigurationsdatei ablegen.
    Das ist eine Textdatei (kann keine JSON sein). Daraus soll der Zugriff dann auf das gewünschte Element stattfinden.
    In etwa so:

    Konfigurationsdatei:

    Code:
    PfadZurId = 'privateDaten,wichtigsteId'
    Konfigurationsdatei in einem anderen Fall

    Code:
    PfadZurId = 'eineEbene,nochEineEbene,AuchNeId'
    Jetzt steh ich gerade mit blutleerem Kopf da:
    1. Ich lese die Konfiguration aus.
    2. Breche mir den Pfad auseinander und schreibe den Pfad in ein Array - soweit klar.

    Aber wie greife ich jetzt mit diesen Informationen dynamisch auf das entsprechende Element in meinem Array "$datenModell "mit den Daten zu?

    Da die Anzahl der Ebenen unterschiedlich sein kann möchte ich das _nicht_ so machen.

    PHP-Code:
    if( count($PfadAusConfig) == 2){
        
    $id $kunde$PfadAusConfig[0] ] [ $PfadAusConfig[1] ];
    }
    if( 
    count($PfadAusConfig) == 3){
        
    $id $kunde$PfadAusConfig[0] ] [ $PfadAusConfig[1] ] [ $PfadAusConfig[2] ]
    .... 
    Ich komm echt nicht drauf. Ist möglicherweise ganz banal, aber ich habe seit Stunden keine Idee und bin blutleer im Kopf

    Habt Ihr einen Tipp?
    Vielen Dank im Voraus!!!

  • #2
    Ist die ID immer das letzte Element?

    Kommentar


    • #3
      Es ist eine ziemlich komplexe Struktur, die ID ist _irgendein_ Element. Es ist also weder das letzte Element, noch unbedingt das tiefste Element in dieser Ebene/ Zweig.

      Kommentar


      • #4
        Und wie ist gekennzeichnet, dass das Element eine ID ist?

        Kommentar


        • #5
          Das ist für jeden Anwendungsfall bekannt.
          Für Autos gibt es ein eigenes (geliefertes) Array mit einer festgelegten/ bekannten Id.
          Für Flugzeuge ein anderes Datenarray mit einer anderen, festgelegten Id.
          ...und so fort.

          Kommentar


          • #6
            Ich denke was du suchst findest du mit den Stichpunkten "Array Flatten PHP".

            Kommentar


            • #7
              Schön wäre es, wenn man dir die Informationen nicht einzeln aus der Nase ziehen müsste und du einen Auszug aus den "lebendigen" Arrays zeigst.
              mit
              Code:
              $id = $datenModell['eineEbene']['nochEineEbene']['AuchNeId'];
              kommt man nicht weiter.

              Kommentar


              • #8
                jspit
                Danke für den Ansatz. Das Datenarray ist aber immer mehrdimensional und hat verschiedene Äste. Vielleicht vergleichbar mit dem DOM einer HTML.

                Ich denke ich werde mal eine Funktion oder Klasse schreiben, die das Array wie ein DOM durchläuft und mir aus der Struktur des Datenarrays das gesuchte Element pickt.
                Ich melde mich wenns klappt.

                Gerne aber noch eine Nachricht, wenn jemand noch eine andere Idee hat

                Kommentar


                • #9
                  kaminbausatz
                  Ja, stimmt. Ich dachte nur es gäbe irgendeine ganz einfache, banale Lösung für so einen Zugriff, die ich übersehen habe. Das scheint nicht so zu sein.
                  Ich meld mich wenn ich eine Lösung habe.

                  Kommentar


                  • #10
                    Zitat von Neither Beitrag anzeigen
                    jspit
                    Danke für den Ansatz. Das Datenarray ist aber immer mehrdimensional und hat verschiedene Äste. Vielleicht vergleichbar mit dem DOM einer HTML.
                    Das ist ja der Sinn vom Flatten alles in ein 1-dim Array zu bringen. Ganz einfaches Beispiel:
                    Aus array("a"=>5, "b" => array("c" => 6)) wird array ('a' => 5, 'b.c' => 6).

                    Das hier habe ich als Basis genommen.

                    Kommentar


                    • #11
                      PHP-Code:
                      $id $kunde;
                      $i 0;
                      while (isset (
                      $PfadAusConfig[$i])) $id $id[$PfadAusConfig[$i++]]; 
                      Signaturrrrrrr

                      Kommentar


                      • #12
                        PHP-Code:
                        <?php
                        $arr 
                        = ['test'=> ['test1' => ['id' => 2]]];
                        $path 'test,test1,id';

                        function 
                        searchValueByPath(array $currentstring $path) {
                            
                        $pathArr explode(','$path);    
                            foreach (
                        $pathArr as $field) {
                                if (!isset(
                        $current[$field])) {
                                    return 
                        null;
                                }

                                
                        $current $current[$field];
                            }

                            return 
                        $current;
                        }


                        var_dump(searchValueByPath($arr$path));

                        Kommentar


                        • #13
                          Das ist in´s Blaue geraten, solange wir nicht wissen, wie das Array aussieht...

                          Kommentar


                          • #14

                            EDIT: Zu langsam ... und mit eval() daher gleich wieder entfernt.
                            The string "()()" is not palindrom but the String "())(" is.

                            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                            PHP.de Wissenssammlung | Kein Support per PN

                            Kommentar


                            • #15
                              kaminbausatz Ist egal welche Struktur das Array hat. Er muss eben den vollen Pfad kennen dann kann er mit der Lösung von Zeichen32 / K313 auf ein Element zugreifen.
                              Die Variante Array-Flatten liefert nebenbei noch alle möglichen Pfade.

                              Kommentar

                              Lädt...
                              X