Autor Zpráva
peter4545
Profil *
Zdravim,

trapim sa s upravou jednej premennej.

Mam premenu

$slovo = "text1-text2-text3-textN-cislo";

V slove moze byt niekolko vela pomlciek a ja chcem toto slovo rozdelit na:

$nove1 = text1-text2-text3-textN;
$nove2 = cislo;

Vedeli by ste mi poradit?

Dakujem.
tiso
Profil
peter4545:
- cez strrpos() si nájdeš pozíciu poslednej pomlčku
- pomocou substr() si rozdelíš reťazec
- ak používaš utf8 text, tak pouziješ mb funkcie
peter4545
Profil *
velka vdaka tiso :)
Keeehi
Profil
preg_match('~(.*)-(\d+)$~','text1-text2-text3-textN-654',$matches);
blaaablaaa
Profil
Keeehi:
Proc slozite, kdyz to jde jednoduse (a rychleji)? =)
Lamicz
Profil
blaaablaaa:
Tím bych si nebyl osobně tak jist. Součet času strrpos a substr vs. jeden ne moc složitý regulár bude imho vycházet líp pro regulár. Tím, že se používají PERL výrazy a ne POSIX, se to značně zrychlilo.
Navíc regulár má velkou výhodu v univerzálnosti a přesnosti (pokud je napsán správně, to je na tom nejtěžší). S klasickými fcemi na řetězce jsem se již několikrát spálil, když dotyčný napsal nestandardní string a najednou z toho vypadlo úplně něco jiného než jsem zamýšlel. Tohle se u správně navrženého reguláru stát nemůže.
Keeehi
Profil
Lamicz:
strrpos() a substr() je oproti mému reguláru 3x rychlejší. Schválně jsem si to otestoval.
Tipl bych si, že to bude tím, že preg_match vyhledává z leva do prava, kdežto strrpos() bude nejspíš začínat hledání z prava. Teď půjde o to, kde bude více znaků, jestli před pomlčkou, nebo za ní.
blaaablaaa
Profil
Lamicz:
Napsal jsem to proto, ze jsem to zkousel (cas pro 10 000 cyklu, prumer z 1000 opakovani) a str funkce jsou vice nez dvakrat rychlejsi.
Pokud napise "spatny" string na vstup, skonci na tom i regular ;) Co napises, to mas ...
Ale v bezne aplikaci je celkem jedno, co pouzijes

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: