mehrdimensionales array mit foreach in Tabelle auslesen


Benjamin Rauer

Mitglied
Hallo ihr lieben, ich hänge mal wieder fest und hoffe ihr könnt mir schnell helfen.
ich hole mir 3 daten die ich mir in einer tabelle anzeigen lasse.
datum stunden punkte
2018-09-21 09:47:00 12.106678
2018-09-21 09:50:00 8.106679
2018-09-21 09:55:00 12.106779
2018-09-21 10:00:00 12.106779
2018-09-22 09:47:00 13.106678
2018-09-22 09:50:00 9.106679
2018-09-22 09:55:00 13.106779
2018-09-22 10:00:00 13.106779

mein problem ist, das ich die daten nicht gruppiert in einer tabellenzeile bekomme

Gewünschte Tabelle
HTML:
<table>
      <tr>
    <?php  if(isset($edit_line) && count($edit_line) > 0){
        foreach($edit_line as $key=>$value){?>
            <td>alle daten aus datum 21 einfügen</td>
           <td>alle daten aus datum 22 einfügen</td>
       <?php } }?>
      </tr>
</table>
bei mir ist das nicht gruppiert

Meine Tabelle
HTML:
<table>
      <tr>
    <?php  if(isset($edit_line) && count($edit_line) > 0){
        foreach($edit_line as $key=>$value){?>
            <td><?php echo $value["punkte"];?></td>
       <?php } }?>
      </tr>
</table>
wie bekomme ich das nun hin das es wie bei "Gewünschte Tabelle" wird?
 

Sempervivum

Erfahrenes Mitglied
Wenn ich das richtig verstehe, hast Du Datum, Stunden und Punkte als einen zusammenhängernden String in deinem Array. Dann müsstest Du den String zerlegen und für jeden Datensatz eine eigene Zeile anlegen:
PHP:
        foreach($edit_line as $key=>$value){
            echo '<tr>';
            $vals = explode(' ', $value);
            echo '<td>' . $vals[0] . '</td>';
            echo '<td>' . $vals[1] . '</td>';
            echo '<td>' . $vals[2] . '</td>';
            echo '</tr>';
       }?>
(Ungetestet)
 

Benjamin Rauer

Mitglied
sehe gerade das es doch nicht so richtig klappen will die daten werden nicht richtig gruppiert es soll so werden
$key ist in diesem fall das datum

Code:
<table>
      <tr>
            foreach($edit_line as $key=>$value){ ?>
            <td><?php echo $key;?>
                <tr>
                      foreach($edit_line as $key=>$value){ ?>
                     <td><?php echo $value['punkte'];?></td>
                      <?php } ?>
                </tr>
            </td>
       <?php } ?>
      </tr>
</table>
nur ist ein denkfehler in den schleifen :(


var_dump($edit_line); ergibt

Code:
array(121) { ["09:20:00"]=> array(1) { ["punkte"]=> float(5.106678) } ["09:47:00"]=> array(1) { ["punkte"]=> float(13.106678) } ["09:50:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["09:55:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["10:00:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["10:05:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["10:10:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["10:15:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["10:20:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["10:25:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["10:30:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["10:35:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["10:40:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["10:45:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["10:50:00"]=> array(1) { ["punkte"]=> float(8.224638) } ["10:55:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["11:00:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["11:05:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["11:10:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["11:15:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["11:20:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["11:25:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["11:30:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["11:35:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["11:40:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["12:20:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["12:25:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["12:30:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["12:35:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["12:40:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["12:45:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["12:50:00"]=> array(1) { ["punkte"]=> float(13.224638) }  ["16:00:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["16:05:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["16:10:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["16:15:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["16:20:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["16:25:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["16:30:00"]=> array(1) { ["punkte"]=> float(13.224638) }  ["17:45:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["17:50:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["17:55:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["18:00:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["18:05:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["18:10:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["18:15:00"]=> array(1) { ["punkte"]=> float(13.224638) } ["19:05:00"]=> array(1) { ["punkte"]=> float(13.224638) } 

["2018-09-17"]=> array(1) { ["punkte"]=> string(8) "5.000000" }
["2018-09-18"]=> array(1) { ["punkte"]=> string(8) "5.000000" }
["2018-09-19"]=> array(1) { ["punkte"]=> string(8) "5.000000" } 
["2018-09-20"]=> array(1) { ["punkte"]=> string(8) "5.000000" }
["2018-09-21"]=> array(1) { ["punkte"]=> string(8) "5.000000" } 
["2018-09-22"]=> array(1) { ["punkte"]=> string(8) "5.000000" } 
["2018-09-23"]=> array(1) { ["punkte"]=> string(8) "5.000000" } 
}
 
Zuletzt bearbeitet:

Sempervivum

Erfahrenes Mitglied
Da verstehe ich einiges nicht:

- In deinem letzten Posting scheint in einem Array zunächst die Uhrzeit der Schlüssel zu sein und dann das Datum?

- Du schreibst, dass das Datum der Schlüssel ist. Dann ist es aber kein eindeutiger Schlüssel. Möchtest Du, dass in einem Datensatz für ein bestimmtes Datum mehrere Einträge vorhanden sind?

- In deinem letzten Codebeispiel macht es keinen Sinn, zwei Mal die gleiche Schleife verschachtelt zu verwenden. Außerdem darf in einem td-Element kein tr-Element stehen.
 

Benjamin Rauer

Mitglied
- In deinem letzten Posting scheint in einem Array zunächst die Uhrzeit der Schlüssel zu sein und dann das Datum?
Ja, sehr eigenartig. Uhrzeit und Punkte aus ersten teil des Arrays sind ohne Datum sind aber aus der DB_Spalte Datum ["2018-09-21"]. verstehe nicht warum die daten nicht

["2018-09-17"]=> array(1) { ["punkte"]=> string(8) "5.000000" }*
["2018-09-18"]=> array(1) { ["punkte"]=> string(8) "5.000000" }*
["2018-09-19"]=> array(1) { ["punkte"]=> string(8) "5.000000" }*
["2018-09-20"]=> array(1) { ["punkte"]=> string(8) "5.000000" }*
["2018-09-21"]=> array(1) { ["punkte"]=> string(8) "5.000000" } <-Hier drin stehen.
["2018-09-22"]=> array(1) { ["punkte"]=> string(8) "5.000000" } *
["2018-09-23"]=> array(1) { ["punkte"]=> string(8) "5.000000" } *


*
Code:
$dataDat    =  Daten aus DB  Datum,Stunde,Punkte

$temp = array();
foreach($dataDat as $key=>$value){
    if(isset($edit_line) && count($edit_line) > 0){
       $nr_imp += $punkte;
       $temp[$value["stunde"]]["punkte"] = $nr_imp;
    } else {
       $temp[$value["stunde"]]["punkte"] = 5.000000;
    }

}
$edit_line = $temp;
ksort($edit_line);



<table>
      <tr>
          <?php if(isset($edit_line) && count($edit_line) > 0){
                  foreach($edit_line as $key=>$value){ ?>
                  <td class="td element-label" data-date="<?php echo $key;?>">
                         <?php FOR WAS HIER HIN {?>
                             <div> Alle Punkte mit dem selben Datum</div>
                          <?php } ?>  
                   </td>
                <?php } ?>
           <?php } ?>
      </tr>
</table>
 

Sempervivum

Erfahrenes Mitglied
Da steige ich auch nicht richtig durch. Poste doch mal ein JSON von dem $dataDat und beschreibe, wie Du es genau in der Tabelle dargestellt haben willst.
 

Benjamin Rauer

Mitglied
Code:
[{"datum":"2018-09-16 09:00:00","stunde":"09:05:00","punkte":"13.106678"},{"datum":"2018-09-16 09:00:00","stunde":"09:20:00","punkte":"5.106678"},{"datum":"2018-09-17 09:50:01","stunde":"09:50:00","punkte":"13.224638"},{"datum":"2018-09-17 09:50:01","stunde":"10:50:00","punkte":"8.224638"},{"datum":"2018-09-18 23:20:01","stunde":"23:20:00","punkte":"18.818660"},{"datum":"2018-09-18 23:25:01","stunde":"23:25:00","punkte":"18.818660"},{"datum":"2018-09-19 00:05:01","stunde":"00:05:00","punkte":"18.818660"},{"datum":"2018-09-20 00:10:01","stunde":"00:10:00","punkte":"18.818660"},{"datum":"2018-09-21 09:00:02","stunde":"09:00:00","punkte":"19.331350"},{"datum":"2018-09-21 09:05:02","stunde":"09:05:00","punkte":"19.331350"},{"datum":"2018-09-22 09:10:01","stunde":"09:10:00","punkte":"19.331350"},{"datum":"2018-09-23 09:15:02","stunde":"09:15:00","punkte":"19.331350"}]
Gekürzt waren schon einige daten..

Code:
<table>
      <tr>
       <td class="td element" data-date="2018-09-16">
             <div>punkte 13.106678 Uhrzeit 09:05:00</div>
             <div>punkte 5.106678 Uhrzeit 09:20:00</div>
        </td>
      <td class="td element" data-date="2018-09-17">
             <div>punkte 13.224638 Uhrzeit 09:50:00</div>
             <div>punkte 8.224638 Uhrzeit 10:50:00</div>
        </td>
      </tr>
</table>
Jeder tag, in diesem Fall vom 16-23.09 soll in ein eigenes td element und die tages gleichen Daten sortiert nach stunde in ein Div.


bei mir wird das allerding so
Code:
<table>
      <tr>
       <td class="td element" data-date="2018-09-16">
             <div>punkte 13.106678 Uhrzeit 09:05:00</div>
        </td>
       <td class="td element" data-date="2018-09-16">
              <div>punkte 5.106678 Uhrzeit 09:20:00</div>
        </td>
       <td class="td element" data-date="2018-09-17">
             <div>punkte 13.224638 Uhrzeit 09:50:00</div>
        </td>
       <td class="td element" data-date="2018-09-17">
             <div>punkte 8.224638 Uhrzeit 10:50:00</div>
        </td>
      </tr>
</table>
angezeigt. Diese ansicht macht die tabelle jedoch unübersichtlich lang. Die td elemente>Div werden später via Java ein-ausgeblendet, deshalb sollen die Daten in die divs.
 

Sempervivum

Erfahrenes Mitglied
So wird das Ganze schon klarer. Ich habe ein Testskript gemacht, das die Tabelle, so wie Du sie angegeben hast, erzeugt:
PHP:
    $str = '[{"datum":"2018-09-16 09:00:00","stunde":"09:05:00","punkte":"13.106678"},{"datum":"2018-09-16 09:00:00","stunde":"09:20:00","punkte":"5.106678"},{"datum":"2018-09-17 09:50:01","stunde":"09:50:00","punkte":"13.224638"},{"datum":"2018-09-17 09:50:01","stunde":"10:50:00","punkte":"8.224638"},{"datum":"2018-09-18 23:20:01","stunde":"23:20:00","punkte":"18.818660"},{"datum":"2018-09-18 23:25:01","stunde":"23:25:00","punkte":"18.818660"},{"datum":"2018-09-19 00:05:01","stunde":"00:05:00","punkte":"18.818660"},{"datum":"2018-09-20 00:10:01","stunde":"00:10:00","punkte":"18.818660"},{"datum":"2018-09-21 09:00:02","stunde":"09:00:00","punkte":"19.331350"},{"datum":"2018-09-21 09:05:02","stunde":"09:05:00","punkte":"19.331350"},{"datum":"2018-09-22 09:10:01","stunde":"09:10:00","punkte":"19.331350"},{"datum":"2018-09-23 09:15:02","stunde":"09:15:00","punkte":"19.331350"}]';
    $arr = json_decode($str, TRUE);
    // var_dump($arr);
    $help = [];
    foreach ($arr as $item) {
        $datumonly = explode(' ', $item['datum'])[0];
        var_dump($datumonly);
        $help2 = ['stunde' => $item['stunde'], 'punkte' => $item['punkte']];
        if (!isset($help[$datumonly])) $help[$datumonly] = [];
        $help[$datumonly][] = $help2;
    }
    var_dump($help);
    echo '<table>';
    echo '<tr>';
    foreach ($help as $key=>$item) {
        echo '<td class="td element" data-date="' . $key . '">';
        foreach ($item as $key2=>$item2) {
            echo '<div>';
            echo 'punkte ' . $item2['punkte'] . ' Uhrzeit' . $item2['stunde'];
            echo '</div>';
        }
        echo '</td>';
    }
    echo '</tr>';
    echo '</table';
?>
Etwas verwirrend ist, dass die Stunde im Datum drin ist. Ist das so gewollt? Wie Du siehst, habe ich das reine Datum extrahiert.