1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Daten aus SQL Array als 3D Matrix ausgeben

Dieses Thema im Forum "PHP" wurde erstellt von Thomas Neef, 14. September 2016.

  1. Thomas Neef

    Thomas Neef Grünschnabel

    Hallo zusammen,

    ich sitze hier vor einem Problem und finde leider keinen Ansatz. Ich hoffe auf einen Guru der mir auf die Sprünge hilft.

    Ich habe ein Array aus einer SQL Abfrage:
    Code (PHP):
    1. (
    2.    [ARTIKEL] => Wadenchaps Cologne-Jr II
    3.     [ARTNR] => 730714
    4.     [BESTAND] => 0
    5.     [ATTRIBUT] => Kid S
    6.     [LIEFFARBE] => R33
    7.     [KLTFARBE] => hellgrau
    8.     [BID] => B_3697_261_DS
    9. )
    10.  
    11. (
    12.    [ARTIKEL] => Wadenchaps Cologne-Jr II
    13.     [ARTNR] => 730714
    14.     [BESTAND] => 2
    15.     [ATTRIBUT] => Kid M
    16.     [LIEFFARBE] => Q89
    17.     [KLTFARBE] => dunkelbraun
    18.     [BID] => B_3697_262_72
    19. )
    20.  
    21. (
    22.    [ARTIKEL] => Wadenchaps Cologne-Jr II
    23.     [ARTNR] => 730714
    24.     [BESTAND] => 0
    25.     [ATTRIBUT] => Kid M
    26.     [LIEFFARBE] => R33
    27.     [KLTFARBE] => hellgrau
    28.     [BID] => B_3697_262_DS
    29. )
    30.  
    31. (
    32.    [ARTIKEL] => Wadenchaps Cologne-Jr II
    33.     [ARTNR] => 730714
    34.     [BESTAND] => 5
    35.     [ATTRIBUT] => Kid S
    36.     [LIEFFARBE] => Q89
    37.     [KLTFARBE] => dunkelbraun
    38.     [BID] => B_3697_261_72
    39. )

    Nun versuche ich vergebens diese als 3D Matrix auszugeben ...

    Im Kopf sollen hier die [ATTRIBUT] stehen ( gruppiert also nur 1x pro Wert )
    Darunter dann die Artikelnummer | Farbe | und der jeweiligen Spalte aus dem Attribut der Bestand.

    wie im bild
    [​IMG]


    Ich habe bereits versucht zuerst den Tabellenkopf mit einer group by abfrage zu erstellen
    jedoch weiss ich nun nicht wie ich die richtige zuordnung der Bestände und der Frarben in die richtigen Spalten bekomme....

    Ich verzweifele langsam bitte helft mir hier mit einem Denkanstoss weiter ....
     
  2. Yaslaw

    Yaslaw n/a Moderator

    Das SQL währe eine grosse Hilfe und auch wie du dein Array zusammensetzt. Aber naja, ich geh jetzt mal davon aus, du hast einen grossen Array mit den abgebildeten Arrays als Unterarrays. Eine Annahme mangels Wissen über die wahre Struktur.

    Hier mal ein ungetesteter Vorschlag
    Code (PHP):
    1. //Testarray
    2. $myArray  = array(
    3.     array(
    4.         'ARTIKEL' => 'Wadenchaps Cologne-Jr II'
    5.         'ARTNR' => '730714'
    6.         'BESTAND' => '0'
    7.         'ATTRIBUT' => 'Kid S'
    8.         'LIEFFARBE' => 'R33'
    9.         'KLTFARBE' => 'hellgrau'
    10.         'BID' => 'B_3697_262_DS'
    11.     ),
    12.     array(
    13.         'ARTIKEL' => 'Wadenchaps Cologne-Jr II'
    14.         'ARTNR' => '730714'
    15.         'BESTAND' => '2'
    16.         'ATTRIBUT' => 'Kid M'
    17.         'LIEFFARBE' => 'Q89'
    18.         'KLTFARBE' => 'dunkelbraun'
    19.         'BID' => 'B_3697_262_72'
    20.     )
    21. );
    22. //Header initialisieren. Das erste Feld ist ein Leerfeld
    23. $header = array('');
    24. $target = array();
    25. foreach ($myArray as $details) {
    26.     $colNr = array_search($details['ATTRIBUT'], $header);
    27.     //Prüfen ob dieser Header bereits exisitert. Wenn ja, hinzufügen
    28.     if($colNr == 0){
    29.         $colNr = count($header);
    30.         $header[$colNr] = $details['ATTRIBUT'];
    31.     }
    32.     //Key erstellen und die Werte ientragen
    33.     $key = "{$details['ARTNR']} {$details['KLTFARBE']}";
    34.     $target[$key][0] = $key;
    35.     $target[$key][$colNr] = $details['BESTAND'];
    36. }
    37.  
    38. //Alles ausgeben
    39. echo '<table>'
    40. echo '  <tr>';
    41. //Heder ausgeben
    42. foreach ($header as $colNr => $value) {
    43.     echo "      <th>{$value}</th>";
    44. }
    45. echo '  </tr>';
    46. //Pro Key eine Zeile ausgeben
    47. foreach ($target as $key => $cols) {
    48.     echo '  <tr>';
    49.     for ($colNr = 0; $colNr < count($header); $colNr++) {
    50.         //Falls die Spalte einen Eintrag hat, den ausgeben ansonsten 0
    51.         $value = isset($cols[$colNr]) ? $cols[$colNr] : 0;
    52.         echo "      <td>{$value}</td>";
    53.     }
    54.     echo '  </tr>';
    55. }
    56. echo '</table>';
     
  3. Thomas Neef

    Thomas Neef Grünschnabel

    Hi Yaslaw,

    danke du bist ein Hellseher ... Ja das Array sieht fast so aus .... ich werde es versuchen mal so umzusetzten und zu lernen !!!! Vielen Dank Dir ;)
     
  4. Thomas Neef

    Thomas Neef Grünschnabel

    Hi Yaslaw,
    das richtige Array (Auszug) sieht so aus.
    Code (PHP):
    1. $myArray  = array(
    2.     array(
    3.         'ARTIKEL' => 'Wadenchaps Cologne-Jr II'
    4.         'ARTNR' => '730714'
    5.         'BESTAND' => '0'
    6.         'ATTRIBUT' => 'Kid S'
    7.         'LIEFFARBE' => 'R33'
    8.         'KLTFARBE' => 'hellgrau'
    9.         'BID' => 'B_3697_262_DS'
    10.     ),
    11.        array(
    12.         'ARTIKEL' => 'Wadenchaps Cologne-Jr II'
    13.         'ARTNR' => '730714'
    14.         'BESTAND' => '6'
    15.         'ATTRIBUT' => 'Kid S'
    16.         'LIEFFARBE' => 'R33'
    17.         'KLTFARBE' => 'dunkelbraun'
    18.         'BID' => 'B_3697_262_RS'
    19.     ),
    20.         'ARTIKEL' => 'Wadenchaps Cologne-Jr II'
    21.         'ARTNR' => '730714'
    22.         'BESTAND' => '8'
    23.         'ATTRIBUT' => 'Kid M'
    24.         'LIEFFARBE' => 'R33'
    25.         'KLTFARBE' => 'hellgrau'
    26.         'BID' => 'B_3697_262_22'
    27.     ),
    28.         'ARTIKEL' => 'Wadenchaps Cologne-Jr II'
    29.         'ARTNR' => '730714'
    30.         'BESTAND' => '2'
    31.         'ATTRIBUT' => 'Kid M'
    32.         'LIEFFARBE' => 'Q89'
    33.         'KLTFARBE' => 'dunkelbraun'
    34.         'BID' => 'B_3697_262_72'
    35.     )
    36. );
    Ich sehe hier leider noch das Problem das Die ATTRIBUTE mehrmals vorkommen - und gruppieren kann man die doch in einem Array nicht oder?
    Das heisst - woher kann man wissen in welcher spalte z.B. Kid M steht.... eine scheiss schwerde nuss für mich ....

    Gruss Thomas
     
  5. Yaslaw

    Yaslaw n/a Moderator

    Ist doch drin
    Code (PHP):
    1. $colNr = [URL='http://www.php.net/array_search']array_search[/URL]($details['ATTRIBUT'], $header);
     
  6. Thomas Neef

    Thomas Neef Grünschnabel

    Danke ich habe sehr viel dazugelernt und es auch denke ganz gut hinbekommen. Dafür meinen besten Dank dem Dozenten 'YASLAW'
    [​IMG]
    Ich habe nur noch ein letztes Problem mit der sortierung....
    Das Attribut ist manchmal Text manchman Dezimalzahlen ..... Hier sollte z.B. bei den Größen nicht das durcheinander sein sonder der Reihenfolge nach.
    Ich habe es mit der sort by versucht direkt aus der Datenbank aber auch asort beim array... leider ohne Erfolg.
    Wo liegt denn hier mein Denkfehler???

    Code (PHP):
    1. ORDER BY dbo.RST_ARTIKELSTAMM.STR_ATTRIBUT";
    2.  
    3. $stmt_2 = sqlsrv_query( $conn, $sql_attribute );
    4.       if( $stmt_2 === false) {
    5.       die( print_r( sqlsrv_errors(), true) );
    6.       }      
    7. while($art2result = sqlsrv_fetch_array($stmt_2 , SQLSRV_FETCH_ASSOC)){
    8.  
    9.  
    10. $myArray[] = array('ARTIKEL' => utf8_encode($art2result['ARTIKEL']),
    11.                   'ARTNR' => $art2result['ARTNR'],
    12.                   'BESTAND' => $art2result['BESTAND'],
    13.                   'ATTRIBUT' => $art2result['ATTRIBUT'],
    14.                   'LIEFFARBE' => utf8_encode($art2result['LIEFARBE']),
    15.                   'KLTFARBE' => utf8_encode($art2result['KLTFARBE']),
    16.                   'LIEFFARBE' => utf8_encode($art2result['LIEFKZ']),
    17.                   'BID' => $art2result['BID']);
    18.                  
    19. }
    20. ......
    21.  
    22. /******** BEGINN ATTRIBUT TEBAELLE ****************************/
    23.  
    24. //Header initialisieren. Das erste Feld ist ein Leerfeld
    25. $header = array('');
    26. $target = array();
    27. foreach ($myArray as $details) {
    28.  
    29.  
    30.    $colNr = array_search($details['ATTRIBUT'], $header);
    31.    //Prüfen ob dieser Header bereits exisitert. Wenn ja, hinzufügen
    32.    if($colNr == 0){
    33.        $colNr = count($header);
    34.        $header[$colNr] = $details['ATTRIBUT'];
    35.    }
    36.    //Key erstellen und die Werte ientragen
    37.    $key = "{$details['ARTNR']} | {$details['KLTFARBE']} | {$details['LIEFFARBE']}";
    38.    $target[$key][0] = $key;
    39.    $target[$key][$colNr] = "<span class='bestand'>".$details['BESTAND']."</span>";
    40. }
    41. ........
     
Die Seite wird geladen...