Listenlänge berechnen

Halpha

Erfahrenes Mitglied
Hallo, ich habe eine Liste die sieht wie folgt aus:
PHP:
Button      1 | 2 | 3 | 4       Button
die Liste ist hier 1-4. Diese kann länger werden und ich bräuchte jetzt eine Möglichkeit zu berechnen wie lang die Liste ist, denn ich muss wenn die zu lang wird eine 2. Liste darunter machen sonst zereist das Stylesheet.

Hat jemand eine Idee?

Danke schon mal;)
 
Die Textbreite z.B. in Pixel zu berechnen wird so nicht klappen. Dazu müsstest du aus der Liste ein Bild erzeugen und hiervon dann die Abmessungen holen (was aber nicht wirklich Sinn macht).

Wenn du kein Problem mit Tabellen hast, könntest du dir eine Tabelle anlegen die z.B. 10 Spalten mit fester Breite hat. Je nachdem wie viele Einträge die Liste dann hat, erstellst du entsprechend viele Zeilen dafür.

Wobei die Gestalltung selber nichts mit PHP zu tun hat. Das Füllen der Tabelle (sofern diese Lösung für dich in Frage kommt) eventuell schon.

Da kannst du dich ja nochmal melden.


NACHTRAG: Es gibt den Befehl "imagefontwidth" damit könntest du eventuell die ca. Abmessung berechnen indem du das Ergebnis mit der Textlänge multiplizierst.!?
 
Zuletzt bearbeitet:
Am einfachsten definierst du eine Maximale Zeichenzahl.
Es währe gut zu wissen wie die Liste 1-4 entsteht. Ich geh mal davon aus, dass es ein fertiger String ist.
PHP:
$string = "1 | 2 | 3 | 4 | 5 | 6 | 7";
$maxLen = 15;
//Funktio um in der Ziele führnede Leerzeichen und | zu entfernen
function myTrim(&$row){
    $row = trim($row, " |");
}
//Mit wordrap nach $maxLen Zeichen ein #### einfügen und mit epclode 
//und dem Trennzeichen #### ein Array mit den Zeilen erstellen
$rows=explode('####', wordwrap($string ,$maxLen, '####'));
//Auf ejde Ziele den Spezialtrim ausführen
array_walk($rows, 'myTrim');
//Und die Zeilen mit einem <br /> zu einem String zusammensetzen
echo implode('<br />', $rows);
 
Fertiger String ist es natürlich im Quelltext aber ansonsten wir die Liste dynamisch erzeugt und genau das ist das Problem, ich muss ja wenn es 50 Elemente sind also 1-50 2 Zeilen machen, bei 10 Elementen jedoch reicht eine Zeile.

Aber die idee mit der width setzen ist gar nicht so schlecht. Es ist mir zwar nicht möglich hier die Liste in eine Tabelle zu wandeln aber ich kann ja die einzelnen li elemente eine width geben und die li Elemente mit dem | Zeichen auch eine breite, dann zähl ich die zwei zusammen und schon kann ich mir berechnen wie lang die ganze Liste ist.

Jetzt ist nur noch das Problem wie ich denn dann merke ob ich 20px vom linken und rechten button bin, denn wenn ja muss ich ja eine neue Zeile machen.

Ich hoffe ich hab mich jetzt bisschen klarer ausgedrückt;)
 
Auf wenn viele sie vielleicht nicht mögen, ich finde Tabellen toll:

PHP:
<?php
//$liste = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
//$liste = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22);
$liste = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31);
$row = ceil(count($liste)/10);
?>

<table>
<tr>
<?php if ($row > 1) { ?>
    <td width="100" rowspan="<?php echo $row; ?>">
<?php } else { ?>
    <td width="100">
<?php } ?>
    BUTTON 1</td>
    <td width="50"><?php echo @$liste[0]; ?></td>
    <td width="50"><?php echo @$liste[1]; ?></td>
    <td width="50"><?php echo @$liste[2]; ?></td>
    <td width="50"><?php echo @$liste[3]; ?></td>
    <td width="50"><?php echo @$liste[4]; ?></td>
    <td width="50"><?php echo @$liste[5]; ?></td>
    <td width="50"><?php echo @$liste[6]; ?></td>
    <td width="50"><?php echo @$liste[7]; ?></td>
    <td width="50"><?php echo @$liste[8]; ?></td>
    <td width="50"><?php echo @$liste[9]; ?></td>
<?php if ($row > 1) { ?>
    <td width="100" rowspan="<?php echo $row; ?>">
<?php } else { ?>
    <td width="100">
<?php } ?>
    BUTTON 2</td>
</tr>
<?php for ($a = 1; $a < $row; $a++) { ?>
<tr>
    <td width="50"><?php echo @$liste[(10*$a)]; ?></td>
    <td width="50"><?php echo @$liste[(10*$a)+1]; ?></td>
    <td width="50"><?php echo @$liste[(10*$a)+2]; ?></td>
    <td width="50"><?php echo @$liste[(10*$a)+3]; ?></td>
    <td width="50"><?php echo @$liste[(10*$a)+4]; ?></td>
    <td width="50"><?php echo @$liste[(10*$a)+5]; ?></td>
    <td width="50"><?php echo @$liste[(10*$a)+6]; ?></td>
    <td width="50"><?php echo @$liste[(10*$a)+7]; ?></td>
    <td width="50"><?php echo @$liste[(10*$a)+8]; ?></td>
    <td width="50"><?php echo @$liste[(10*$a)+9]; ?></td>
</tr>
<?php } ?>
</table>
 
Zurück