Autor | Zpráva | ||
---|---|---|---|
drozdo Profil |
#1 · Zasláno: 10. 2. 2010, 02:37:23
Dobry den,
Potreboval by som pomoc s orezanim retazca. Konkretne mam retazce: string1....... skjlf skj dflsbflbkljbsldkjb aaa string2 .... jsldgisfgsidfghgf aaaaa Potrebujem aby sa orezali po 15-tom znaku, a zaroven pred najblizsou medzerou: cize vypisalo by mi: string1 ... skjlf skj dflsbflbkljbsldkjb string ... jsldgisfgsidfghgf |
||
mckay Profil |
#2 · Zasláno: 10. 2. 2010, 09:35:42
drozdo:
Když by si to zkombinoval s regulárním výrazem, můžeš použít funkci substr();. Použij to takto: $promenna = substr($promenna, 0,15); Ale zkombinuj to s regulárem, kterej ti vyhledá nejbližší mezeru po patnáctém znaku. Možná mě tak napadá, že potom bude snažší to řešit celé regulárem. |
||
AM_ Profil |
#3 · Zasláno: 10. 2. 2010, 09:39:22
|
||
lingvik Profil |
#4 · Zasláno: 10. 2. 2010, 09:47:39 · Upravil/a: lingvik
function orez($length, $what) { // Vrati cely retezec, pokud neni dost dlouhy if (strlen($what) < $length) { return $what; } // Zjistim, kde je nejblizsi mezera za stanovenym poctem znaku $pos = strpos($what, ' ', $length - 1); if ($pos === false) { // Od mista orezani az do konce neni zadna mezera. Vysledkem je zase cely retezec. return $what; } // Vratim podretezec od zacatku po nalezenou mezeru return substr($what, 0, $pos); } V této implementaci je možné, že výsledný řetězec bude mít pouze 14 znaků, pokud je patnáctým znakem mezera. Pokud pracuješ v kódování UTF-8 nebo něčem podobném multibytovém, používej funkce mb_strlen(), mb_strpos() a mb_substr(). EDIT: oprava v řádku č.15 jako reakce na #7. Přehlédl jsem, že třetí parametr pro substr není pozice posledního znaku, ale délka podřetězce. Ta -1 tam byla špatně. |
||
drozdo Profil |
#5 · Zasláno: 10. 2. 2010, 11:28:09 · Upravil/a: drozdo
Dobre napady, co by ste povedali na moju funkciu, trocha pritiahnuta za vlasy, ale robi co ma:
function orez($popisn) { if(strlen($popisn)>15) { $mezera = strpos(substr($popisn,15)," "); $popisall = substr($popisn,0,15); $popisall .= substr($popisn,15,$mezera); return $popisall; } else { return $popisn; } } Ked tak kritiku >|, dakujem |
||
SwimX Profil |
#6 · Zasláno: 10. 2. 2010, 11:49:16
drozdo:
1) $popisall = substr($popisn,0,15); $popisall .= substr($popisn,15,$mezera); a neřešíš když se mezera nenajde, protože pak strpos vrátí false takže řádek $popisall .= substr($popisn,15,$mezera); asi hodí chybu.
Použíj tudle: #4 Je velmi obdobná, jen vychytaná :) |
||
drozdo Profil |
#7 · Zasláno: 10. 2. 2010, 11:53:27 · Upravil/a: drozdo
Ano dobre, hoci ta funkcia so 4 mi oreze vzdy posledne pismeno
edit dal som prec pri retrun (-1) a neorezava, dakujem |
||
SwimX Profil |
#8 · Zasláno: 10. 2. 2010, 11:58:25
drozdo:
eště si můžeš upravit první řádek: function orez($what, $length=15) { |
||
drozdo Profil |
#9 · Zasláno: 10. 2. 2010, 12:03:15
Ano vim dakujem, tu 15ku som dal len ako priklad, volat bude samozrejme hocicim inym.
|
||
Časová prodleva: 14 let
|
0