Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme beim Durchlaufen eines mehrdimensionalen Arrays

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

  • Probleme beim Durchlaufen eines mehrdimensionalen Arrays

    Hallo Zusammen,

    ich habe Probleme beim Durchlaufen eines mehrdimensionalen Arrays und würde euch gerne um Hilfe bitten.
    Das Array ($data) ist wie folgt aufgebaut:

    Code:
    array(2) {
      ["row1"]=>
      array(3) {
        ["FileID"]=>
        string(14) "20416-03622-00"
        ["DocCutOff"]=>
        string(10) "14.03.2016"
        ["POL"]=>
        string(27) "SOUTHAMPTON, UNITED KINGDOM"
      }
      ["row2"]=>
      array(3) {
        [0]=>
        array(3) {
          ["FileID"]=>
          string(14) "10316-05190-00"
          ["DocCutOff"]=>
          string(10) "02.06.2016"
          ["POL"]=>
          string(24) "FRANKFURT A.M. , GERMANY"
          }
        }
        [1]=>
        array(3) {
          ["FileID"]=>
          string(14) "10316-02628-00"
          ["DocCutOff"]=>
          string(10) "14.03.2016"
          ["POL"]=>
          string(27) "SOUTHAMPTON, UNITED KINGDOM"
          }
        }
        [2]=>
        array(3) {
          ["FileID"]=>
          string(14) "10316-10937-00"
          ["DocCutOff"]=>
          string(10) "23.12.2016"
          ["POL"]=>
          string(22) "ROTTERDAM, NETHERLANDS"
          }
        }
      }
    Ich müsste nun für jeden der Datensätze (von oben nach unten) die Werte auslesen und in einer Tabelle ausgeben. Das Ergebnis sollte so aussehen:

    20416-03622-00; 14.03.2016; SOUTHAMPTON, UNITED KINGDOM
    10316-05190-00; 02.06.2016; FRANKFURT A.M. , GERMANY
    10316-02628-00; 14.03.2016; SOUTHAMPTON, UNITED KINGDOM
    10316-10937-00; 23.12.2016; ROTTERDAM, NETHERLANDS

    Mit
    Code:
    foreach ($data AS $row) {
        echo $row['FileID']."; ".$row['DocCutOff']."; ".$row['POL'];
    }
    bekomme ich "row1" ausgelesen, "row2" allerdings nicht.
    Mit einer verschachtelten Schleife

    Code:
    foreach ($data AS $row) {
        echo $row['FileID']."; ".$row['DocCutOff']."; ".$row['POL'];
    
        foreach ($row AS $subrow) {
            echo $subrow['FileID']."; ".$subrow['DocCutOff']."; ".$subrow['POL'];
        }
    }
    bekomme ich nur teilweile richtige Ergebnisse weil ja die Ebenenverteilung so nicht stimmt. Die Ausgabe sieht in etwa so aus:

    20416-03622-00; 14.03.2016; SOUTHAMPTON, UNITED KINGDOM
    2; 2; 2
    1; 1; 1
    S; S; S
    10316-05190-00; 02.06.2016; FRANKFURT A.M. , GERMANY
    10316-02628-00; 14.03.2016; SOUTHAMPTON, UNITED KINGDOM
    10316-10937-00; 23.12.2016; ROTTERDAM, NETHERLANDS

    Hätte jemand einen Tipp wie man das am elegantesten bewerkstelligen könnte?


    Danke im Voraus und viele Grüße,

    Daniel


  • #2
    Ich würde Dir ja echt gerne helfen, aber bei der Struktur ist es fast unmöglich, die eigentliche Struktur herauszubekommen.
    Ich rate mal:
    PHP-Code:

     $array 
    =
        [
            
    "row1" =>
                [
                    [
                        
    "FileID" => "20416-03622-00",
                        
    "DocCutOff" => "14.03.2016",
                        
    "POL" => "SOUTHAMPTON, UNITED KINGDOM"
                    
    ]
                ],
            
    "row2" =>
                [
                    [
                        
    "FileID" => "10316-05190-00",
                        
    "DocCutOff" => "02.06.2016",
                        
    "POL" => "FRANKFURT A.M. , GERMANY"
                    
    ],
                    [
                        
    "FileID" => "10316-02628-00",
                        
    "DocCutOff" => "14.03.2016",
                        
    "POL" => "SOUTHAMPTON, UNITED KINGDOM"
                    
    ],
                    [
                        
    "FileID" => "10316-10937-00",
                        
    "DocCutOff" => "23.12.2016",
                        
    "POL" => "ROTTERDAM, NETHERLANDS"
                    
    ]
                ]
        ] 

    Kommentar


    • #3
      array_walk_recursive: http://php.net/manual/en/function.ar...-recursive.php
      implode

      Dann hast du auch O(n) als Komplexität und nicht O(n^2)
      GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken - Vagrant AMPP-Stack (Apache, MySQL, PHP, PgSQL), fully configured

      Kommentar


      • #4
        Nimm eine fertige Funktion. Ich glaube die Funktion ArrayFilterChildarraysRecursive macht genau das was du suchst:
        PHP-Code:
        $data = [/* dein Array */];

        $filter = array("FileID" => NULL"DocCutOff" => NULL"POL" => NULL);
        $result ArrayFilterChildarraysRecursive($data$filter);

        debug::write($result); 
        Habs kurz probiert (Dank an ichtys für den Quellcode des Arrays) mit folgenden Resultat:
        PHP-Code:
        $result = array (
          
        =>
          array (
            
        'FileID' => "20416-03622-00",
            
        'DocCutOff' => "14.03.2016",
            
        'POL' => "SOUTHAMPTON, UNITED KINGDOM",
          ),
          
        =>
          array (
            
        'FileID' => "10316-05190-00",
            
        'DocCutOff' => "02.06.2016",
            
        'POL' => "FRANKFURT A.M. , GERMANY",
          ),
          
        =>
          array (
            
        'FileID' => "10316-02628-00",
            
        'DocCutOff' => "14.03.2016",
            
        'POL' => "SOUTHAMPTON, UNITED KINGDOM",
          ),
          
        =>
          array (
            
        'FileID' => "10316-10937-00",
            
        'DocCutOff' => "23.12.2016",
            
        'POL' => "ROTTERDAM, NETHERLANDS",
          ),
        ); 
        Dies ist eine ideale Struktur, um daraus eine Tabelle zu erstellen:
        PHP-Code:
        echo html::table('border=1',array("File ID","Datum","Ort"),$result); 
        tabelle.png

        LG jspit
        Angehängte Dateien
        jspit.de github

        Kommentar


        • #5
          Vielen Dank jspit, hat super funktioniert!!!
          Danke auch an alle anderen für die tollen Ideen!

          Kommentar

          Lädt...
          X