Hallo,
Die Verarbeitungslogik wäre wie folgt.
Initialisiere Zeilennumerierung
Beginne HTML-Tabelle
Für jede Datenzeile
Initialisiere die Zellennumerierung
Beginne erste HTML-ZeileBeginne HTML-Zelle
Schreibe Zeilennumerierung
Erhöhe Zeilennumerierung
Schließe HTML-Zelle
[...]
Schließe HTML-Tabelle abDas überfordert mich derzeit.
Ich bin davon ausgegangen, ich muss nur einen Zähler erstellen, dessen jeweiliges Ergebnis im ersten Feld eines jeden Arrays mit der Variablen $a eine fortlaufende Zahl einträgt.
Warum ist es sinnvoll, zwei Zähler zu nutzen?
a) Du benötigst einen, um Deine Datenzeile (die eine HTML-Doppelzeile ist)
durchzunumerieren.
b) Innerhalb einer Datenzeile kannst Du den zweiten Zähler für die
Identifikation der Zelle, die Zuweisung des Inhaltes und die Zuweisung
der Klasse nutzen.
Meine PHP Kenntnisse sind einfach zu mager, um derzeit mehr zu machen.
Das hat mit PHP nichts zu tun - das ist Programmiertechnik :-)
Ein Blick auf das Muster.
Das kann nicht abgeändert werden. Ich habe die Zahlen in der ersten Spalte inzwischen per Hand nachgesetzt. Dort sollte die automatische Zählung hinein.
Altgriechisch sollte auch mit altgriechischen Zeichen geschrieben werden, dann könnte ich es wenigstens lesen ;-) Zumindest leuchtet mir ein, warum Du die Datenzeile $verse nennst.
Zum einen könntest Du mein Vorgehen an Deine Bedürfnisse anpassen, nutze dazu die Hinweise von Beat. Auf der anderen Seite könntest Du auch mit einem Template arbeiten, das heißt einer Schablone für eine Datenzeile:
$template = '
<tr>
<td class="a">{#nr#}<br>404</td>
<td class="b">{#b#}</td>
<td class="c">{#c#}</td>
<td class="d">{#d#}</td>
<td class="e">{#e#}</td>
<td class="f">{#f#}</td>
<td class="g">{#g#}</td>
<td class="h">{#h#}</td>
<td class="i">{#i#}</td>
</tr>
<tr>
<td class="k"></td>
<td class="ko" colspan="8"><p class="ko">{#k#}</p></td>
</tr>
';
// Array der zu ersetzenden Platzhalter:
$search = array(
'{#nr#}',
'{#b#}',
'{#c#}',
'{#d#}',
'{#e#}',
'{#f#}',
'{#g#}',
'{#h#}',
'{#i#}',
'{#k#}'
);
Verwende str_replace(), um die Platzhalter (hier gekennzeichnet durch Einschließung in {# #}) durch die aktuellen Werte zu ersetzen.
Die Werte erhältst Du, indem Du als erstes Element zu Deinem Zeilenarray die aktuelle Zeilennummer hinzufügst. Dazu kannst Du array_unshift() nutzen.
Die Vorgehensweise vereinfacht sich zu:
# Initialisiere Spaltenüberschriften
# Anmerkung:
# Verwende th-Elemente, vermutlich kannst Du auf die Klasse "head"
# verzichten.
$head = '
<tr class="head">
<td class="a">Vers Nr.<br>A<br>O</td>
<td colspan="2">Luther 1545<br>Alpha / Omega</td>
<td colspan="2">Greek<br>Alpha / Omega</td>
<td colspan="2">Vulgata<br>Alpha / Omega</td>
<td colspan="2"></td>
</tr>
';
# Initialisiere Schablone (Template)
# Anmerkung:
# a, b, c, ... sind *keine* guten Klassennamen.
$template = '
<tr>
<td class="a">{#nr#}<br>404</td>
<td class="b">{#b#}</td>
<td class="c">{#c#}</td>
<td class="d">{#d#}</td>
<td class="e">{#e#}</td>
<td class="f">{#f#}</td>
<td class="g">{#g#}</td>
<td class="h">{#h#}</td>
<td class="i">{#i#}</td>
</tr>
<tr>
<td class="k"></td>
<td class="ko" colspan="8"><p class="ko">{#k#}</p></td>
</tr>
';
# Initialisiere Platzhalter-Array
# Array der zu ersetzenden Platzhalter:
# Passe dies an Deine Vorgaben an, ich komme nicht auf 11 Einträge :-)
$search = array(
'{#nr#}',
'{#b#}',
'{#c#}',
'{#d#}',
'{#e#}',
'{#f#}',
'{#g#}',
'{#h#}',
'{#i#}',
'{#k#}'
);
# Initialisiere Zeilennumerierung mit 1
$zeile = 1;
# Beginne HTML-Tabelle
# Wir bauen den HTML-Code der Tabelle in einer Zeichenkette zusammen;
# die Ausgabe erfolgt erst, wenn wir fertig sind.
$output = "<table>\n";
# Schreibe feste Kopfzeile mit den Überschriften
# bekommst Du bestimmt selber hin :-=
$output .= $head;
# Für jede Datenzeile
# Ich fände es sinnvoller, wenn das zweidimensionale Array $tabelle heißt
# und eine aktuelle Zeile als $verse angesprochen wird
[link:http://www.php.net/manual/de/control-structures.foreach.php@title=foreach] ($tabelle as $verse) {
# Zeilennumerierung
# Füge an den Anfang der Datenzeile die aktuelle Zeilennummer ein
[link:http://www.php.net/manual/de/function.array-unshift.php@title=array_unshift]($verse, $zeile);
# Erhöhe die aktuelle Zeilennummer
$zeile++;
# Alternativ kannst Du den [link:http://www.php.net/manual/de/language.operators.increment.php@title=Post-Inkrementoperator] bereits in die
# vorhergehende Zeile integrieren. Statt zwei Zeilen bleibt eine:
# array_unshift($verse, $zeile++);
# Dies fügt zuerst den aktuellen Inhalt der Variablen $zeile an den
# Anfang des Arrays $verse an und erhöht *danach* den Wert von $zeile
# HTML-Zeilen schreiben
# Ersetze in der Schablone die Platzhalter und schreibe das Resultat
$output .= str_replace($search, $verse, $template);
} # Ende "Für jede Zeile"
# Schließe HTML-Tabelle ab
$output .= "</table>\n";
# ganze Tabelle ausgeben:
print $output;
Die einzelnen Schritte habe ich durch ein paar Erläuterungen für Dich ergänzt (in normalen Kommentaren haben diese Erklärungen nichts mehr verloren) und in die jeweilige PHP-Anweisung übersetzt (ungetestet ;-)).
Genauso läßt sich übrigens mein Pseudocode aus dem vorhergehenden Beitrag 1:1 in PHP-Code umsetzen.
Freundliche Grüße
Vinzenz