Gleiche Stringlänge bei 3 Werten

Hallo,

ich habe ein Array mit 3 Strings:

$feld = array ( "Handy", "Computer", "Drucker", );

Jetzt würde ich gerne die Zeichenanzahl des längsten Strings herausfinden und die Strings, die kürzer sind, am Ende mit Leerzeichen auffüllen. Bsp:

“Computer” hat 8 Zeichen und ist damit der längste String. Die beiden anderen Strings sollen dann wie folgt dargestellt werden:

"Drucker "
"Handy "

Hat jemand eine Idee, wie ich das mit PHP 5 realisieren kann?

Edit: Ich sehe gerade, dass das Wort “Handy” im Beispiel nicht richtig dargestellt wird. Aber ich denke, es ist auch so klar, was ich meine.

$len = 0;

foreach($feld as $one)
   if(strlen($one) > $len)
         $len=strlen($one);

foreach($feld as $id => $one)
   for($i=strlen($one); $i<$len; $i++)
       $feld[$id] .= " ";

das sollte es gewesen sein :wink:

Nee, das ist nicht ganz das, was ich wollte. Bei deinem Skript wird immer nur ein Leerzeichen eingefügt. Ich will aber, dass solange Leerzeichen eingefügt werden, bis alle Strings gleichlang sind. Bei Handy müssten also 3 Leerzeichen eingefügt werden, bei Drucker dagegen nur 1.

hm, bei mir funktioniert das einwandfrei:

array(3) { [0]=> string(8) "Handy " [1]=> string(8) "Computer" [2]=> string(8) "Drucker " }

Wobei man natürlich dazu sagen muss, dass die Ausgabe in HTML nicht so aussehen würde. Dann solltest du anstatt ein Leerzeichen-String   benutzen, oder eben

 drumherum.
        

@Cujo, Michis script sollte funktionieren.
Sonst kannste das aber auch so machen, kommt aufs gleiche hinaus:

$len = 0;

foreach($feld as $one)
   if(strlen($one) > $len)
         $len=strlen($one);

foreach($feld as $id => $one)
    $anzahl = $len - strlen($feld[$id]);
    $feld[$id] .= str_repeat(chr(32), $anzahl);

mfg Balmung

Ich werd’s heute Abend nochmal ausprobieren.

Noch was zum Hintergrund: Es geht darum, dass ich für ein Formular mehrere Felder mit Auswahllisten untereinander platzieren möchte. Damit die Felder gleich lang sind, müssen die Array-Elemente auch gleich lang sein. Wer will, kann sich das hier mal angucken:

test.raetselstunde.de/logical3.html

In der ersten Zeile haben die Werte alle 6 Zeichen, ab der zweiten Zeile dagegen 7. Dadurch wird die erste Zeile verschoben.

Moin,

das ist aber eher ein Darstellungsproblem. Du kannst select-Feldern übrigens auch eine bestimmte Breite geben mit Hilfe von CSS und so die Anzeigeproblematik beheben. Ansonsten könnten dir auch die HTML-Tags fieldset und label u.U. weiterhelfen.

*.css

select { width:100px; }

MfG
myPages

$len = 0;

foreach($feld as $one)
   if(strlen($one) > $len)
         $len=strlen($one);

foreach($feld as $id => $one)
   for($i=strlen($one); $i<$len; $i++)
       $feld[$id] .= "&nbsp;";

HTML-Ausgabe

Das Ganze bringt dann aber auch nur was, wenn man eine Monospace Schriftart nutzt und dann verrückte Dinge wie sowas vorhat…

mfg Balmung

das ist klar…

eine CSS-Lösung wäre dann erstrebenswerter :wink:

Auszug aus dem PHP Handbuch;

[quote]<?php
$input = “Alien”;
echo str_pad($input, 10); // ergibt "Alien "
echo str_pad($input, 10, “-=”, STR_PAD_LEFT); // ergibt "-=-=-Alien"
echo str_pad($input, 10, "", STR_PAD_BOTH); // ergibt "Alien"
echo str_pad($input, 6 , “__"); // ergibt "Alien
?>

[/quote]

[quote=“myPages”]Moin,

das ist aber eher ein Darstellungsproblem. Du kannst select-Feldern übrigens auch eine bestimmte Breite geben mit Hilfe von CSS und so die Anzeigeproblematik beheben. Ansonsten könnten dir auch die HTML-Tags fieldset und label u.U. weiterhelfen.

*.css

select { width:100px; } [/quote]

Ich habe mich für diese Variante entschieden. Ich bedanke mich bei allen für die Hilfe :wink: