Gleichmäßig verteilte Darstellung von Werten

jonschmidt

Grünschnabel
Hallo,

vielleicht hat jemand einen Tip für mich, wie ich folgendes Problem lösen kann. Ich möchte aus einer Datenbank alle Einträge einer bestimmten Tabelle auslesen. Diese Einträge sollen auf der Seite angezeigt werden. Die Darstellung soll aber nun so erfolgen, dass die Einträge soweit wie möglich auf drei Spalten gleichmäßig verteilt angezeigt werden (s.u.). Also irgendwie zuerst die Gesamtzahl raussuchen und dann entsprechend auslesen. Oder in einem Array verarbeiten? Bin da noch nicht so erfahren. Habt Ihr einen Tip für mich, wie man das "elegant" löst?

Danke und Gruß,
Jon

Wert 1 - Wert 7 - Wert 13
Wert 2 - Wert 8 - Wert 14
Wert 3 - Wert 9 - Wert 15
Wert 4 - Wert 10 - Wert 16
Wert 5 - Wert 11 - Wert 17
Wert 6 - Wert 12
 
Gibt mehrere Möglichkeiten hierfür:
1.) HTML-Tabelle, einfach beim ausgeben der Werte mitzählen und nach jedem 3. Wert
HTML:
</tr><tr>
einfügen

2.) printf http://www.php.net und nach jedem 3. Wert
HTML:
<br>
anhängen
 
Als Tabelle:
PHP:
$n = count($record);
$l = floor($n / 3);
echo '<table>';
for ($i=0, $m=0; $i<$l; $i++) {
    if ($m == 0) {
        echo '<tr>';
    }
    echo '<td>'.$record[$m * $l + floor($i / 3)].'</td>';
    $m = ++$m % 3
    if ($m == 0) {
        echo '</tr>';
    }
}
if ($m != 0) {
    echo '</tr>';
}
echo '</table>';
 
Vielen Dank für Eure Tips. Leider sortieren die Lösungen waagerecht von links nach rechts, machen eine neue Zeile auf und sortieren wieder von links nach rechts.

Ich müsste aber z.B. bei einem 3-Spalten Layout und 10 Einträgen die ersten Vier in der linken Spalte untereinander listen, die 2. Vier in der mittleren Spalte untereinander und die verbleibenden Zwei in der rechten Spalte untereinander ...
 
Es ist nicht schön aber es funktioniert:


PHP:
<?php
$a[] = 0;
$a[] = 1;
$a[] = 2;
$a[] = 3;
$a[] = 4;
$a[] = 5;
$a[] = 6;
$a[] = 7;
$a[] = 8;
$a[] = 9;
$a[] = 10;
$a[] = 11;
$a[] = 12;
$a[] = 13;
$zeilen = count($a) / 3;

echo "<table>";
for ($b = 0; $b < $zeilen; $b++) {
	$c = $b+$zeilen+1;
	$d = $b+($zeilen*2)+1;
	echo "<tr><td>";
	echo @$a[$b];
	echo "</td><td>";
	echo @$a[$c];
	echo "</td><td>";
	echo @$a[$d];
	echo "</td></tr>";
}
echo "</table>";
?>
 
@tombe: Vielen Dank für den Tip. Ich habe es jetzt wie folgt gelöst (Dein Beispiel hatte bei 4 Array-Elementen kleine Probleme).

Gruß Jon


PHP:
<table>
<?
$getData = mysql_query("SELECT DIMENSION1, DIMENSION2 FROM table");
while($row  =  mysql_fetch_row($getData)) { $a[] = array('DIMENSION1' => $row[0], 'DIMENSION2' => $row[1]); }

$rows = ceil( count($a) / 3 );
for ($b = 0; $b < $rows; $b++) {
	$c = $b + $rows;
	$d = $b + ($rows * 2);
?>
	<tr>
		<td width="33%"><? if($a[$b][DIMENSION1] != "") { ?><a href="page.php?ID=<?=@$a[$b][DIMENSION1];?>"><?=@$a[$b][DIMENSION2];?><? } ?></a></td>
		<td width="33%"><? if($a[$c][DIMENSION1] != "") { ?><a href="page.php?ID=<?=@$a[$c][DIMENSION1];?>"><?=@$a[$c][DIMENSION2];?><? } ?></a></td>
		<td width="33%"><? if($a[$d][DIMENSION1] != "") { ?><a href="page.php?ID=<?=@$a[$d][DIMENSION1];?>"><?=@$a[$d][DIMENSION2];?><? } ?></a></td>
<? } ?>
</table>
 
Zuletzt bearbeitet:
Zurück