bart1708: Array "umsortieren"

Hallo,

ich lasse mir per preg_match_all(); ein Array liefern.

Das Array zeigt z. b. folgende Werte:

  [1] => Array  
        (  
            [0] => 24.03.2014  
            [1] => 25.06.2014  
            [2] => 19.07.2014  
        )  
  
    [2] => Array  
        (  
            [0] => Wert 1  
            [1] => Wert 2  
            [2] => Wert 3  
        )  
  
    [3] => Array  
        (  
            [0] => weiterer Wert 1  
            [1] => weiterer Wert 2  
            [2] => weiterer Wert 3  
  
        )

Wie kann ich die Ausgabe des Arrays verändern, dass die Werte so ausgegeben werden:

  [1] => Array  
        (  
            [0] => 24.03.2014  
            [1] => Wert 1  
            [2] => weiterer Wert 1  
        )  
  
    [2] => Array  
        (  
            [0] => 25.06.2014  
            [1] => Wert 2  
            [2] => weiterer Wert 2  
        )  
  
    [3] => Array  
        (  
            [0] => 19.07.2014  
            [1] => Wert 3  
            [2] => weiterer Wert 3  
  
        )

Danke für Eure Hilfe.

  1. Meine Herren!

    Mathematisch betrachtet möchtest du das Array transponieren. Am besten stellt man sich das vor, indem man das Array einmal um die Diagonale dreht. Wikipedia hat dazu eine schöne Animation.

    Wir können das ganz einfach mit array_map erreichen.
    Angenommen wir haben die Daten:

    $matrix = array(  
        array('a','b','c'),  
        array(1,2,3)  
    );
    

    Dann können wir die Transponierte wie folgt berechnen:

    $transposed = array_map( null, $matrix[0], $matrix[1] );

    Das blöde an dem Code ist, dass wir jede Zeile der Matrix einzeln an die array_map-Funktion übergeben müssen. Das können wir beheben, indem wir die Parameter automatisch aus der Matrix entpacken (etwas Theorie).

    Der Code ändert sich dann wie folgt:

    $transposed = call_user_func_array('array_map', array_merge(array(null),$matrix) );

    Das sieht ziemlich abenteuerlich aus, aber das liegt nur daran, dass wir in PHP (noch) keine schönere Methode haben um Parameter zu entpacken.

    Vorstellen muss man sich den Code so:

    $transposed = array_map( null, ...$matrix );

    Wobei die Punkte hier andeuten sollen, dass die Zeilen aus der Matrix extrahiert werden und als einzelne Parameter an array_map übergeben werden.

    --
    “All right, then, I'll go to hell.” – Huck Finn
  2. Hallo,

    ich lasse mir per preg_match_all(); ein Array liefern.

    Das Array zeigt z. b. folgende Werte:

    [1] => Array

    (
                [0] => 24.03.2014
                [1] => 25.06.2014
                [2] => 19.07.2014
            )

    [2] => Array
            (
                [0] => Wert 1
                [1] => Wert 2
                [2] => Wert 3
            )

    [3] => Array
            (
                [0] => weiterer Wert 1
                [1] => weiterer Wert 2
                [2] => weiterer Wert 3

    )

    
    >   
    > Wie kann ich die Ausgabe des Arrays verändern, dass die Werte so ausgegeben werden:  
    >   
    > ~~~php
    
      [1] => Array  
    
    >         (  
    >             [0] => 24.03.2014  
    >             [1] => Wert 1  
    >             [2] => weiterer Wert 1  
    >         )  
    >   
    >     [2] => Array  
    >         (  
    >             [0] => 25.06.2014  
    >             [1] => Wert 2  
    >             [2] => weiterer Wert 2  
    >         )  
    >   
    >     [3] => Array  
    >         (  
    >             [0] => 19.07.2014  
    >             [1] => Wert 3  
    >             [2] => weiterer Wert 3  
    >   
    >         )
    
    

    Danke für Eure Hilfe.

    http://wiki.selfhtml.org/wiki/Artikel:PHP/Arrays_mal_anders_herum

    Ein Arraysortierer

    1. Meine Herren!

      http://wiki.selfhtml.org/wiki/Artikel:PHP/Arrays_mal_anders_herum

      Mir gefällt der Artikel nicht. Wenn man eine Datenstruktur einführt, dann im Grunde weil sich gewisse Operationen darauf elegant oder besonders schnell durchführen lassen. Toms Spalten-Arrays bieten beides nicht, sogar die elementarste Operationen zum Einfügen ist irre kompliziert, dafür muss man sich nur die Funktions-Signatur ansehen:

      function insert_record(&$_data, $recno, $_record, $expand=false, $overwrite=false)

      Kompliziertere Methoden wie das Filtern, Sortieren und Aggregieren von Daten möchte ich mir gar nicht darauf vorstellen.

      Diese Kritik hab ich Tom auch schon direkt entgegengebracht, leider kam daraufhin keine Diskussion zu Stande.

      --
      “All right, then, I'll go to hell.” – Huck Finn