problem mit einer schleife...
benni
- php
0 Sönke Tesch0 Ralf Walther
hi!
also mal vorweg der hintergrund der geschichte:
ich hab ne zitate-sammlung in ner datenbank, und möchte die zitate per gd-lib in ein bild schreiben lassen, um das bild z.B. in einem Forum als Signatur anzeigen zu lassen.
das problem: wenn ich einen text in das bild schreibe, werden am "ende" des bildes nicht automatisch zeinelnumbrüche gemacht. also schreibe ich mir ein script, dass bei einem leerzeichen ab mindestens soundsoviel zeichen die zeile aufhört und die nächste zeile anfängt. gesagt, getan. das script ansich funktioniert:
/* hier wird die erste zeile angezeigt, geht noch n bissl anders als die restlichen */
$trennpunkt[1] = strpos($string," ",50);
$zeichenzahl[1] = $trennpunkt[1];
$zeile[1] = substr($string,0,$zeichenzahl[1]);
echo $zeile[1]."<br>";
/*ab hier gehts regelmäßig weiter... */
$trennpunkt[2] = strpos($string," ",100);
$zeichenzahl[2] = $trennpunkt[2] - $trennpunkt[1];
$zeile[2] = substr($string,$zeichenzahl[1],$zeichenzahl[2]);
echo $zeile[2]."<br>";
$trennpunkt[3] = strpos($string," ",150);
$zeichenzahl[3] = $trennpunkt[3] - $trennpunkt[2];
$zeile[3] = substr($string,$trennpunkt[2],$zeichenzahl[3]);
echo $zeile[3]."<br>";
[...]
Bis hierher funktioniert noch alles.
dann hab ich mir gedacht, dass man das ganze doch praktischer weise in eine schleife verpacken könnte...:
[Zeile 1 wird wieder wie oben gesondert ausgegeben]
$i = 1;
$y = 2;
$z = 100;
do {
$trennpunkt[$y] = strpos($string," ",$z);
$zeichenzahl[$y] = $trennpunkt[$y] - $trennpunkt[$i];
$zeile[$y] = substr($string,$zeichenzahl[$i],$zeichenzahl[$y]);
echo $zeile[$y]."<br>";
$z = $z + 50;
$i++;
$y++;
} while ($z<=strlen($string)) ;
wieso geht das jetzt nicht???
ich bin so langsam am verzweifeln...
ausgegeben wird hier nämlich folgendes:
Das hier wird ein ganz ganz langer string, um zu testen,
ob ein Zeilenumbruch stattfindet... glaub ich
zu testen, ob ein Zeilenumbruch stattfindet... gl
testen, ob ein Zeilenumbruch stattfindet... glaub i
sten, ob ein Zeilenumbruch stattfindet... glaub
kann mir jemand helfen?
viele grüße und besten dank im vorraus,
benni
das problem: wenn ich einen text in das bild schreibe, werden am "ende" des bildes nicht automatisch zeinelnumbrüche gemacht. also schreibe ich mir ein script, dass bei einem leerzeichen ab mindestens soundsoviel zeichen die zeile aufhört und die nächste zeile anfängt.
Ich will Dir nicht den Spaß am Debuggen nehmen (probiere mal, alle Variablen in der Schleife auszugeben, damit Du den Ablauf verfolgen kannst), aber die Funktion wordwrap() macht möglicherweise genau das, was Du haben willst.
Gruß,
soenk.e
verdammt...
macht man sich ewig mühe, und dann gibt es wordwrap... ;-)
Naja.
das mit den variablen ausgeben hab ich schon probiert, es sollte eigentlich alles stimmen...
viele grüße,
benni
hi!
Tja, zu früh gefreut...
hab grad wordwrap ausprobiert:
wenn ich den text damit in ein bild schreibe, wird er nach der entsprechenden buchstabenzahl zwar in der höhe um eine zeile nach unten verschoben, aber nicht wieder nach links...
es ergibt
sich also
dieses schriftbild
....
viele grüße,
benni
hab grad wordwrap ausprobiert:
wenn ich den text damit in ein bild schreibe, wird er nach der entsprechenden buchstabenzahl zwar in der höhe um eine zeile nach unten verschoben, aber nicht wieder nach links...
Dann benötigt die Software, die Du zur Weiterverarbeitung benutzt, zusätzlich zum (standardmäßig von wordwrap() ausgegebenen) Zeichen \n ("Zeilenvorschub") noch das Zeichen \r ("Wagenrücklauf", so wie bei der guten, alten Schreibmaschine).
Wahrscheinlich sitzt Du vor einer Microsoft-Maschine (braucht \r\n), Unix & Co. benutzen nur \n, Apple hingegen nur \r.
Du kannst den Unterbrecher (hier wohl "\r\n", aber prinzipiell bleibt es Deiner Phantasie überlassen) bei wordwrap() angeben. Ein Blick in die Anleitung schafft Klärung.
Gruß,
soenk.e
hi benni!
$zeile[3] = substr($string,$trennpunkt[2],$zeichenzahl[3]);
$zeile[$y] = substr($string,$zeichenzahl[$i],$zeichenzahl[$y]);
Sieh Dir die beiden Zeilen an (1. aus den "Einzelteilen", 2. aus der Schleife).
Der gravierende Unterschied ist, daß du oben als zweiten Parameter das
Vorgänegerelement von Trennpunkt nimmst und unten das von Zeichenzahl, das
beim ersten Mal auf alle Fälle, in der Folge wohl kaum dem Trennpunkt ist.
Gruß Ralf