Probleme beim Erstellen einer dynamischen Tabelle, mit colspan

xloouch

Erfahrenes Mitglied
Hallo zusammen

Ich habe ein kleines Problem.

Ich übergebe einer Funktion einen zweidimensionalen Array..

in diesem Array hat es an verschiedenen Punkten ein Element, welche mehrere cols lang sein können.

Nun kommt aber das Hauptproblem.. Wie wandle ich diesen zweidimensionalen Array richtig in eine Tabelle um:

Hier der Beispielarray:
PHP:
Array
(
    [0] => Array
        (
            [0] => Zeit
            [1] => 8:00
            [2] => 8:30
            [3] => 9:00
            [4] => 9:30
            [5] => 10:00
            [6] => 10:30
            [7] => 11:00
            [8] => 11:30
            [9] => 12:00
            [10] => 12:30
            [11] => 13:00
            [12] => 13:30
            [13] => 14:00
            [14] => 14:30
            [15] => 15:00
            [16] => 15:30
            [17] => 16:00
            [18] => 16:30
            [19] => 17:00
            [20] => 17:30
            [21] => 18:00
        )

    [1] => Array
        (
            [0] => SZ Bibliothek
            [2] => Array
                (
                    [STATUS] => 1
                    [Duration] => 6
                    [WER] => rgn
                    [ID] => 1
                    [Title] => asdf
                )

            [12] => Array
                (
                    [STATUS] => 1
                    [Duration] => 4
                    [WER] => rgn
                    [ID] => 5
                    [Title] => zusatzbesprechung
                )

        )

    [2] => Array
        (
            [0] => SZ Hauptgebäude
            [3] => Array
                (
                    [STATUS] => 1
                    [Duration] => 1
                    [WER] => rgn
                    [ID] => 2
                    [Title] => asdfasdfa
                )

        )

    [3] => Array
        (
            [0] => SZ Nebengebäude
            [15] => Array
                (
                    [STATUS] => 1
                    [Duration] => 2
                    [WER] => dg
                    [ID] => 4
                    [Title] => dani
                )

        )

    [4] => Array
        (
            [0] => SZ Dachgeschoss
            [1] => Array
                (
                    [STATUS] => 1
                    [Duration] => 19
                    [WER] => rgn
                    [ID] => 6
                    [Title] => test dachgeschoss
                )

        )

)

Wenn ich diesen Array in eine Tabelle umwandle, verschiebt es mir teilweise die anderen Felder:

Funktion:
PHP:
$source_array=$this->generateCalendarArray(@$this->result_array,$this->rooms,$this->zeiten);
		
		//print_r($source_array);
		echo "<br /><br />";
		$count_rows=count($source_array[0]);
		$count_cols=count($source_array);
		$s = "<div  >\n";
		$s .= "<table class=\"dayview\" border=\"0\">\n";
		$s .= "<caption> Tagesübersicht</caption>";
		$s .= "<thead>";
		$s .= "<tr><td colspan=\"".$count_cols."\">";
		$s .= "Reservationen vom $day.$month.$year. <input type=\"hidden\" name=\"datum\" value=\"$day.$month.$year\" />";
		$s .= "</td></tr>";
		$s .= "</thead>";
		
		$s .= "<tbody>\n";
		
		
		$count="";
		$color_reserviert="";
		
		for($j=0;$j<$count_rows;$j++){
			$s .= "<tr>\n";
			if($j==0){
				for ($i=0; $i<$count_cols;$i++){
					$s.="<th>".$source_array[$i][0]."</th>\n";
				}
			} else {
				for($i=0;$i<$count_cols;$i++){
					if($i!=0 && @$source_array[$i][$j]){
						if(@!isset($source_array[$i][$j]["STATUS"])){
							$source_array[$i][$j]["STATUS"]=0;
						}
						if($source_array[$i][$j]["STATUS"]==1 && @$source_array[$i][$j]["Duration"]>0){
							$s.="<td style=\"background-color:#FF0000; vertical-align:top;\" rowspan=\"".$source_array[$i][$j]["Duration"]."\">".$source_array[$i][$j]["Title"]."<br/> dauer:".$source_array[$i][$j]["Duration"]."</td>";;
						}elseif(empty($source_array[$i][$j])){
						//elseif(@$source_array[$i][$j]["STATUS"]==0 && @$source_array[$i][$j]["Duration"]>0){
							$s.="<td></td>\n";
						} else {
							$s.="";
						}
						
						$count=@$source_array[$i][$j]["Duration"];
					} else {
						//echo $count;
						if($count>0 && $count--){
							echo $count;
							$s.="";
						} else {
						 $s.="<td>".@$source_array[$i][$j]."</td>\n";
						}
					}
				}
			}
			$s .="</tr>\n";
			$count=0;
		}
		
		$s .= "</tbody>";
		$s .= "</table>";
		$s .= "</div>";

		return $s;

Hier der Output in HTML:

HTML:
<table class="dayview" border="0">
<caption> Tagesübersicht</caption><thead><tr><td colspan="5">Reservationen vom 5.12.2008. <input type="hidden" name="datum" value="5.12.2008" /></td></tr></thead><tbody>

<tr>
<th>Zeit</th>
<th>SZ Bibliothek</th>
<th>SZ Hauptgebäude</th>
<th>SZ Nebengebäude</th>
<th>SZ Dachgeschoss</th>
</tr>
<tr>
<td>8:00</td>
<td></td>
<td></td>

<td></td>
<td style="background-color:#FF0000; vertical-align:top;" rowspan="19">test dachgeschoss<br/> dauer:19</td></tr>
<tr>
<td>8:30</td>
<td style="background-color:#FF0000; vertical-align:top;" rowspan="6">asdf<br/> dauer:6</td></tr>
<tr>
<td>9:00</td>
<td></td>
<td style="background-color:#FF0000; vertical-align:top;" rowspan="1">asdfasdfa<br/> dauer:1</td><td></td>

</tr>
<tr>
<td>9:30</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>10:00</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>

<tr>
<td>10:30</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>11:00</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>

<td>11:30</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>12:00</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>12:30</td>

<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>13:00</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>13:30</td>
<td style="background-color:#FF0000; vertical-align:top;" rowspan="4">zusatzbesprechung<br/> dauer:4</td></tr>

<tr>
<td>14:00</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>14:30</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>

<td>15:00</td>
<td></td>
<td></td>
<td style="background-color:#FF0000; vertical-align:top;" rowspan="2">dani<br/> dauer:2</td></tr>
<tr>
<td>15:30</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>

<td>16:00</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>16:30</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>17:00</td>

<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>17:30</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>18:00</td>
<td></td>

<td></td>
<td></td>
<td></td>
</tr>
</tbody></table>

Hatte jemand schon so ein Problem mit dem Colspan

Falls ja, kann derjenige mir sagen, wie er das Problem angegangen / gelöst hat?


Danke im vorraus für eure Hilfe
 
Zuletzt bearbeitet:
Du müsstest jedes mal prüfen, ob ein vorhergehendes Ereignis bereits vorüber ist und erst dann eine neue Tabellenzelle ausgeben.
 
Hi Gumo.

Hab es schon mal so probiert gehabt, aber dannn habe ich das Problem mit der "duration" Variable, welche überschrieben wird...

Hm. wenn ich für jede Spalte eine Variable definiere, und dieser dann den entsprechenden Wert zuweise, könnte es funktionieren, oder?
 
Sobald ein neues Ereignis beginnt, erhöhst du einen Zähler der Spalte um <Duration>. Bei jeder Zeile prüfst du dann, ob der Zähler gleich 0 ist, gibst dann gegebenenfalls die leere Zelle aus und dekrementierst den Zähler.
 
Zurück