Autor | Zpráva | ||
---|---|---|---|
Petr Kuba Profil * |
#1 · Zasláno: 31. 1. 2009, 20:23:56
Ahoj,
jak muzu zjistit pocet radku v php? Proste potrebuji vypsat text ktery ma pokazde jiny pocet znaku a hlavne pokazde jine znaky, cili omezeni poctem znaku nefunguje a tak potrebuji vypsat text ktery se vleze do 4 radku, co bude nad 4 radky tak oriznout. Nevite nekdo jak na to? Nebo neexistuje nejaka FCI? Dekuji |
||
imploder Profil |
#2 · Zasláno: 31. 1. 2009, 20:35:40
střílím od boku:
$radku = 1; $delka = strlen($retezec); for($i=0; $i<$delka; $i++) if($retezec[$i]=='\n') $radku++; Začíná se na prvním řádku, na každém konci řádku (tj. znaku '\n') se počet zvýší. V proměnné $radku by měl pak být počet řádků řetězce $retezec. |
||
Majkl578 Profil |
#3 · Zasláno: 31. 1. 2009, 20:42:59
$lines = substr_count($string, "\n") + 1; |
||
imploder Profil |
#4 · Zasláno: 31. 1. 2009, 20:43:44 · Upravil/a: imploder
A na to, co potřebuješ, se hodí nejdřív použít wordwrap() na nařezání textu na řádky (pokud nemáš konce řádků pevně stanoveny) a pak:
$delka = strlen($retezec); for($i=0, $nr=0; $i<$delka && $nr<4; $i++) { if($retezec[$i]=='\n') $nr++; echo $retezec[$i]; } To vypisuje znaky řetězce dokud nenarazí na 4. konec řádku. Vypíše se i ten 4. konec řádku a tím to končí. |
||
Petr Kuba Profil * |
#5 · Zasláno: 31. 1. 2009, 20:44:35
a cim se to vypisuje?
echo $delka; ? a pujde to nastylovat potom jako text-align: justify? diky |
||
imploder Profil |
#6 · Zasláno: 31. 1. 2009, 20:48:13
Petr Kuba
Myslíš ten můj druhý kód? Ten se vypisuje sám - příkazem echo $retezec[$i];, co v něm je. Se stylováním to nesouvisí, půjde to nastylovat úplně stejně jako jakýkoliv jiný text. <div style="text-align:justify"> <?php $delka = strlen($retezec); for($i=0, $nr=0; $i<$delka && $nr<4; $i++) { if($retezec[$i]=='\n') $nr++; echo $retezec[$i]; } ?> </div> |
||
Petr Kuba Profil * |
#7 · Zasláno: 31. 1. 2009, 20:54:49
porad to ale nejak nechapu, co to presne ma udelat? vypise to text jen na 4 radky?
diky |
||
imploder Profil |
#8 · Zasláno: 31. 1. 2009, 20:59:27
Petr Kuba
Vypíše to první 4 řádky textu. Kde řádky končí musí být už v tom řetězci určeno. Pokud chceš délku řádku omezit na určitý počet znaků, použij na $retezec nejdřív funkci wordwrap(). |
||
Petr Kuba Profil * |
#9 · Zasláno: 31. 1. 2009, 21:01:19
aha, jenze tady je problem v tom, za znak i a znak treba H ma jinou sirku a tudiz pocet znaku bude pusobit pokazde s jinou delkou..
|
||
Petr Kuba Profil * |
#10 · Zasláno: 31. 1. 2009, 21:01:54
pri stejnem poctu znaku
|
||
imploder Profil |
#11 · Zasláno: 31. 1. 2009, 21:05:15 · Upravil/a: imploder
Petr Kuba
Pokud použiješ neproporcionální písmo, tak mají všechny znaky stejnou šířku. Na co to vlastně potřebuješ? Na stránkách se text zalamuje automaticky a skript to nemusí řešit. Význam by to mělo v případě, že opravdu chceš řádky dlouhé nejvýš přesný počet znaků, třeba 80 pro zobrazení na terminálu nebo pokud se výstup ukládá do txt souboru. |
||
Petr Kuba Profil * |
#12 · Zasláno: 31. 1. 2009, 21:12:02
Potrebuji to k vypisu uplne stejnych odstavcu, cili nejak takto, max 4 radky, jelikoz mam pevne stanoveny "height"
x xxx xx x xxxx xxxx xxxxx xxx xxx xxx xxxx xxxx xxxx xxxxx xxx xx x xx x xxx xx x xxxx xxxx xxxxx xxx xxx xxx xxxx xxxx xxxx xxxxx xxx xx x xx x xxx xx x xxxx xxxx xxxxx xxx xxx xxx xxxx xxxx xxxx xxxxx xxx xx x xx x xxx xx x xxxx xxxx xxxxx xxx xxx xxx xxxx xxxx xxxx x xxx xx x xxxx xxxx xxxxx xxx xxx xxx xxxx xxxx xxxx xxxxx xxx xx x xx x xxx xx x xxxx xxxx xxxxx xxx xxx xxx xxxx xxxx xxxx xxxxx xxx xx x xx x xxx xx x xxxx xxxx xxxxx xxx xxx xxx xxxx xxxx xxxx xxxxx xxx xx x xx x xxx xx x xxxx xxxx xxxxx xxx xxx xxx xxxx xxxx xxxx xxxxx x xxx xx x xxxx xxxx xxxxx xxx xxx xxx xxxx xxxx xxxx xxxxx xxx xx x xx x xxx xx x xxxx xxxx xxxxx xxx xxx xxx xxxx xxxx xxxx xxxxx xxx xx x xx x xxx xx x xxxx xxxx xxxxx xxx xxx xxx xxxx xxxx xxxx xxxxx xxx xx x xx x xxx xx x xxxx xxxx xxxxx xxx xxx Ps: neproporcionální písmo ? jako napriklad jake? Je to bezne dostupne a zobrazuje se v vsech prohlizecich spravne? dekuji |
||
imploder Profil |
#13 · Zasláno: 31. 1. 2009, 22:17:14
Petr Kuba
Tak do řetězce dej konce řádků přesně tam, kde je chceš mít, a je po problému. Není potřeba kvůli něčemu takovému šaškovat se zvláštníma funkcema. Jednoduchý postup: - text zkopíruj do souboru, třeba soubor.txt a ten ulož do adresáře se skriptem - tam, kde ho chceš vypsat, dej echo nl2br(file_get_contents("soubor.txt")); Samozřejmě můžeš místo v souboru mít text přímo ve skriptu: echo "x xxx xx x xxxx xxxx xxxxx xxx xxx xxx xxxx xxxx xxxx xxxxx xxx xx x xx<br>" ."x xxx xx x xxxx xxxx xxxxx xxx xxx xxx xxxx xxxx xxxx xxxxx xxx xx x xx<br>" ."x xxx xx x xxxx xxxx xxxxx xxx xxx xxx xxxx xxxx xxxx xxxxx xxx xx x xx<br>" ."x xxx xx x xxxx xxxx xxxxx xxx xxx xxx xxxx xxxx xxxx"; „Ps: neproporcionální písmo ? jako napriklad jake? Je to bezne dostupne a zobrazuje se v vsech prohlizecich spravne?“ Konkrétně například Terminus nebo Courier. V CSS se neproporcionální písmo nastavuje font-family: monospace |
||
tiso Profil |
#14 · Zasláno: 31. 1. 2009, 22:22:59 · Upravil/a: tiso
Petr Kuba - stačí v CSS tomu prvku s výpisom nastaviť overflow: hidden;
|
||
DJ Miky Profil |
#15 · Zasláno: 1. 2. 2009, 00:00:19
… a zadat výšku (height).
|
||
tiso Profil |
#16 · Zasláno: 1. 2. 2009, 00:05:59
DJ Miky - to už spomenul v [#12]
|
||
joe Profil |
#17 · Zasláno: 1. 2. 2009, 01:00:59
„jelikoz mam pevne stanoveny "height"“
A pokud si uživatel zvětší písmo, tak si toho asi moc nepřečte. |
||
Časová prodleva: 8 měsíců
|
|||
czhDavid Profil * |
#18 · Zasláno: 26. 9. 2009, 23:52:26
Pokud se nepletu tak zdejší verze kodu nebudou fungovat.
Podmínka if($retezec[$i]=='\n') se totiž nemůže splnit.$retezec[$i] je totiž pouze jeden jediný znak a v této podmínce je porovnáván s \n což jsou dva znaky(kontoloval sem to pomocí strlen). tudíž správný zápis podmínky by byl if($retezec[$i]=='\' && $retezec[$i+1]=='n'). Poté již script bude fungovat správně |
||
imploder Profil |
#19 · Zasláno: 27. 9. 2009, 01:46:05
czhDavid
„$retezec[$i] je totiž pouze jeden jediný znak a v této podmínce je porovnáván s \n což jsou dva znaky(kontoloval sem to pomocí strlen)“ Zřejmě jsi to zkoušel ve Windows. Windows opravdu používá jako konec řádku 2 znaky: <CR><LF>. V Unixu je konec řádku jen jeden znak: <LF>. http://en.wikipedia.org/wiki/Linebreak#Representations Na konec řádku jako 2 znaky by se to muselo upravit. Nepočítal jsem s tím, že to někdo použije jako hotové řešení, spíše to je pro inspiraci. |
||
imploder Profil |
#20 · Zasláno: 27. 9. 2009, 01:52:16
czhDavid
vlastně jde o trochu jiný problém: „tudíž správný zápis podmínky by byl if($retezec[$i]=='\' && $retezec[$i+1]=='n'). “ \n je v PHP escape sekvence, tj. zápis speciálního znaku, který se převede na něco jiného (v tomto případě na znak <LF>, tedy 0x0A). Napsal jsem tam špatně apostrofy - mezi apostrofy se escape sekvence v PHP nepřevede; funguje jenom mezi uvozovkami. Správně tam patří uvozovky: if($retezec[$i]=="\n") |
||
Časová prodleva: 15 let
|
0