FAQ |
Kalender |
2007-01-31, 15:08 | #1 | |||
|
||||
Medlem
|
Jag blir vansinnig på den här enkla funktionen och jag får inte till det ordentligt (det är eventuella radbrytningar (\n) i texten som orsakar problem.
Tanken är att $text är en enkel oformatterad text, och funktionen ska returnera allt med tecknet ">" framför varje rad. $chars_per_row är styrningen för hur långa raderna ska bli (man får ta hänsyn till att det är ord i texten, så man inte klipper orden rakt av). Jag bifogar en grundstomme, men kom gärna med en ny infallsvinkel om du har bättre förslag: Kod:
function text2rows($text, $chars_per_row) { $words = explode(' ', $text); $i = 0; $row = array(); foreach ($words AS $t) { $row[$i] .= $t.' '; if (strlen($row[$i]) > $chars_per_row) $i++; // ny rad. } foreach ($row AS $t) $new_text .= "> ".trim($t)."\n"; return $new_text; } |
|||
Svara med citat |
2007-01-31, 20:56 | #2 | ||
|
|||
Medlem
|
Hur menar du blir fel? En snabbläsning av koden ovan så verkar det som att blankrader kommer ignoreras i räkning - alltså kan dem finnas överallt. Kanske bättre att antingen ta bort alla radbrytningar (alt. ta bort alla radbrytningar som inte är dubbla)?
|
||
Svara med citat |
2007-02-08, 23:36 | #3 | |||
|
||||
Flitig postare
|
fick du ordning på det? snabba tankar: hinner bara titta lite snabbt men du borde köra en preg_replace för annars lär texten du lägger in bli mysko med mellanrummen och radbrytena. Sen måste du känna av om detä r en tom rad (ifsats..) och du hålla räkningen på bokstäverna så om ett ord får plats eller inte plats på en rad...
|
|||
Svara med citat |
2007-02-09, 04:12 | #4 | |||
|
||||
Har WN som tidsfördriv
|
Annars kan du säkert använda wordwrap med samma resultat:
Kod:
function text2rows($text, $chars_per_row) { return wordwrap($text, $chars_per_row, "\n> "); } |
|||
Svara med citat |
2007-02-09, 04:30 | #5 | |||
|
||||
Har WN som tidsfördriv
|
Eller gör om din ursprungliga funktion en aning:
Kod:
function text2rows($text, $chars_per_row) { //$text = preg_replace("/\s+/", " ", $text); // om du vill bli av med överflödiga whitespaces $text = preg_replace("/[\r\n]+/", " ", $text); // om du vill bli av med radbrytningar $words = explode(' ', $text); $i = 0; $row = array(); foreach ($words as $t) { $row[$i] .= $t.' '; if (strlen($row[$i]) > $chars_per_row) $i++; // ny rad. } foreach ($row AS $t) $new_text .= "> ".trim($t)."\n"; return $new_text; } |
|||
Svara med citat |
Svara |
|
|