Strings mit Spaces ausrichten

Hi!

Ich experimentiere gerade ein wenig mit PHP, MySQL und HTML herum und bin jetzt auf ein Problem gestoßen, für das ich in SelfPHP / SelfHTML keine Lösung finde. Vielleicht kann mir hier ja jemand helfen?

Problem:

Eine Select-Liste

soll mit Daten gefüllt werden. Diese Daten kommen aus einer MySQL-Datenbank. Die Datenbank liefert mir fünf Felder (Nr, Titel, Einkommen, Anzahl, Typus). Bis auf „Titel“ und „Typus“ sind alle Felder numerisch. Um eine ausgerichtete Anzeige in der Select-Liste hinzubekommen, müssen die einzelnen Felder auf Maximal-Länge ausgerichtet werden, d.h.

„Nr“ ist dreistellig und braucht führende Leerzeichen,
„Titel“ ist 30stellig und braucht nachfolgende Leerzeichen,
„Einkommen“ ist sechsstellig und braucht führende Leerzeichen,
„Anzahl“ ist fünfstellig und braucht führende Leerzeichen,
„Typus“ ist zwar 15stellig, braucht aber nicht ausgerichtet werden, da Zeilenende erreicht.

Bsp.:
gelesene Werte aus der Datenbank

Nr = 3
Titel = „Herzog von Schwaben“
Einkommen = 1000
Anzahl = 100
Typus = „Schwertkämpfer“

Nr = 97
Titel = „Bischof von Salzburg“
Einkommen = 500
Anzahl = 50
Typus = „Schwertkämpfer“

Ziel ist jeweils eine Textzeile für die Select-Liste (die Punkte stellen Leerzeichen dar, nur zur besseren Übersicht):

„…3.Herzog von Schwaben…1000…100.Schwertkämpfer“
„.97.Bischof von Salzburg…500…50.Schwertkämpfer“

Gibt es einen PHP-Befehl, der mir aufgrund der Länge der aus der DB gelesenen Werte entsprechend viele Leerzeichen davor- bzw. dahinter stellt (quasi das Gegenstück zu „trim“)? Oder muss ich mühselig einen Work-Around (PHP-Funktion)basteln? Oder gibt es eine dritte Methode?

Grüße
Heinrich

Hallo,

Ziel ist jeweils eine Textzeile für die Select-Liste (die
Punkte stellen Leerzeichen dar, nur zur besseren Übersicht):

„…3.Herzog von
Schwaben…1000…100.Schwertkämpfer“
„.97.Bischof von
Salzburg…500…50.Schwertkämpfer“

Gibt es einen PHP-Befehl, der mir aufgrund der Länge der aus
der DB gelesenen Werte entsprechend viele Leerzeichen davor-
bzw. dahinter stellt (quasi das Gegenstück zu „trim“)? Oder
muss ich mühselig einen Work-Around (PHP-Funktion)basteln?

Den Befehl gibt es tatsächlich: printf oder sprintf.

Was du brauchst ist folgendes:
$s=„3.Herzog von Schwaben“;
printf("[%-30s]\n", $s);
Das gibt folgendes aus:

 3.Herzog von Schwaben

Hier noch der Link zum Befehl:
http://de2.php.net/manual/en/function.sprintf.php
oder
http://de2.php.net/manual/en/function.printf.php
Der Unterschied ist, dass printf den string gleich ausgibt, während sprintf, den String als Rückgabewert übergibt, ohne ihn tatsächlich in den Ausgabebuffer zu schreiben.
Also mit sprintf müsste es so aussehen:

$s=„3.Herzog von Schwaben“;
echo sprintf("[%-30s]\n", $s);

Gruss, Omar Abo-Namous

Hi!

Was du brauchst ist folgendes:
$s=„3.Herzog von Schwaben“;
printf("[%-30s]\n", $s);
Das gibt folgendes aus:

3.Herzog von Schwaben

Hier noch der Link zum Befehl:
http://de2.php.net/manual/en/function.sprintf.php
oder
http://de2.php.net/manual/en/function.printf.php
Der Unterschied ist, dass printf den string gleich ausgibt,
während sprintf, den String als Rückgabewert übergibt, ohne
ihn tatsächlich in den Ausgabebuffer zu schreiben.
Also mit sprintf müsste es so aussehen:

$s=„3.Herzog von Schwaben“;
echo sprintf("[%-30s]\n", $s);

Schöne Lösung …
Hilft mir nur nicht weiter.
Denn HTML macht aus mehreren aufeinander folgenden Spaces immer ein einzelnes Space.

$s=„3.Herzog von Schwaben“;
echo sprintf("[%-30s]\n", $s);

Das ergibt bei mir „[3.Herzog von Schwaben]“ - also keine nachfolgenden Spaces wie gewünscht.
Die Spaces tauchen nur auf, wenn sie als   definiert sind. Aber wie definiere ich diesen Wert in „sprintf“?

Grüße
Heinrich

$s=„3.Herzog von Schwaben“;
echo sprintf("[%-30s]\n", $s);

Schöne Lösung …
Hilft mir nur nicht weiter.
Denn HTML macht aus mehreren aufeinander folgenden Spaces
immer ein einzelnes Space.

$s=„3.Herzog von Schwaben“;
echo sprintf("[%-30s]\n", $s);

Das ergibt bei mir „[3.Herzog von Schwaben]“ - also keine
nachfolgenden Spaces wie gewünscht.
Die Spaces tauchen nur auf, wenn sie als definiert sind.
Aber wie definiere ich diesen Wert in „sprintf“?

vielleicht geht das tatsächlich, aber daran solltest du dich nicht aufhalten lassen:

$s=str\_replace ( " ", "& nbsp;", $s);

natürlich musst du das & nbsp; auch richtig schreiben…

Gruss, Omar Abo-Namous