Hello,
Rauskommen soll:
wohnort alerts strasse
| wohnort leer |strasse
04318 | |TheodorNeubauerStrasse
57074 | |Auf der Hohenfuhr
96049 | |Untere Sandstrasse
95445 | |St.NikolausStr.
28203 | |eschenstr.
26180 | |Holunderweg a
Array
(
[wohnort] => Array
(
[0] =>
[1] => 04318
[2] => 57074
[3] => 96049
[4] => 95445
[5] => 28203
[6] => 26180)
[alerts] => Array
(
[0] => wohnort leer;
)[strasse] => Array
(
[0] => strasse
[1] => TheodorNeubauerStrasse
[2] => Auf der Hohenfuhr
[3] => Untere Sandstrasse
[4] => St.NikolausStr.
[5] => eschenstr.
[6] => Holunderweg a)
)
Ich lasse das Quoting mal absichtlich drin stehen.
Erstmal herzlichen Glückwunsch zum Aufbau des Arrays als "Spaltenarray". Das ist der empfohlene Aufbau aus zwei Gründen:
1. es spart erheblichen Overhead bei den Bezeichnern
Jeder Splatenbezeichner muss nur einmal vorkommen
2. Bei der Umwandlung in eine HTML-Tabelle stehen alle relavanten Größen
sofort zur Verfügung. Bei einer HTML-Tabelle sit nämlich nicht die
Länge begrenzt, sondern die Anzahl der Spalten muss in jeder Zeile
gleich sein.
Die Anzahl der Spalten und deren Überschriften ergibt sich aber als Anzahl der Keys der ersten Dimension. Da Du die Überschriften ggf. benötigst (eventuell sigar auf jeder Bildschirmseite, wenn Du blättern lassen willst), bsorgst Du Dir als erstes die Paltennamen:
$_colnames = array_keys($_addresses); ## ich nenne das Ding nun mal $_addresses
Die Elemente jeder einzelnen Spalte sollten korrespondieren, also sollte es in jeder Spalte jeden Index geben, auch wenn er keinen Wert enthält. Anderenfalls ist bereits im Vorfeld 'was schiefgegangen und Du musst es hier erst reparieren.
Ich würde das nicht On-The-Fly (also während der Ausgabefunktion) machen, sondern eine Separate Funktion dafür schreiben.
1. Schritt
besorgen des kleinsten und des größten Index über alle Spalten:
$min=0;
$max=0;
foreach($_colnames as $colname)
{
foreach($_addresses[$colname] as $key => $val)
{
$min = min($min,$key);
$max = max($max,$key);
}
}
Wenn Du willst, kannst Du nun das Array erstmal "reparieren". Man sollte dabei aber an den zusätzlichen Speicherbedarf für die Leerelemente denken.
for($index = $min, $index <= $max, $index++)
{
foreach($_colnames as $colname)
{
if (!isset($addresses[$colname][$index])
{
$$addresses[$colname][$index] = NULL; ## man könnte ggf. auch false benutzen.
}
}
}
Nun liegt das Array in einer vollständigen Spaltenform vor.
Du kannst es also nun rein mechanisch ausgeben lassen.
echo "<table class="adressen">\n";
echo " <tr>\n";
foreach($_colnames as $colname)
{
echo " <th class="adresse">".htmlentities($colname)."</th>\n";
}
echo " </tr>\n";
#--- nach Index sortiert ausgeben
for($index = $min, $index <= $max, $index++)
{
echo " <tr>\n";
foreach($_colnames as $colname)
{
echo " <td class="adresse">.htmlentities($_addresses[$colname][$index])."</td>\n";
}
echo " </tr>\n";
}
#---
#--- oder nach einer Spalte sortiert ausgeben
foreach($_addresses[$leitspalte] as $key => $val) ## hierzu MUSS das Array vollständig sein!
{
echo " <tr>\n";
foreach($_colnames as $colname)
{
echo " <td class="adresse">.htmlentities($_addresses[$colname][$key])."</td>\n";
}
echo " </tr>\n";
}
#---
echo "</table>\n";
In der Regel sollte das Splatenarray vollständig sein und der Wertebereich der Indexe bekannt
sein, da es irgendwie über eine Abfrage entstanden sein wird.
Ein weiterer beim Spaltenarray ist dann, dass man sofort nach jeder Spalte sortieren kann.
Die gewünschte nach Werten sortierte Spalte muss man dann nur als Leitspalte benutzen.
Ich hoffe, dass keine Bugs drin sind und ich Dir helfen konnte
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau