Autor Zpráva
gaminn
Profil *
Zdravím,
mám takovou úlohu - potřebuji zjistit zda 1. řetězec se na konci shoduje s 2. řetězcem. Tedy taková funkce by měla vyhodit true při (za sebou jsou uvedeny 1. a 2. řetězec):

škola kola
obloha oha
a.0d/e .0d/e

Samozřejmě jsem nějak schopný si takovou funkci napsat, ale mohli byste mi navrhnout nějaká opravdu jednoduchá řešení?
tiso
Profil
preg_match - viac na php.net
gaminn
Profil *
To mě také napadlo, ale co když ten řetězec obsahuje znaky jako . * []? Nebude s tím problém? Navíc by to určitě šlo udělat ještě lépe bez pomoci regulárních výrazů.

P.S. Nechci, aby to vypadalo, že jsem nějaký lenoch, který tu od Vás chce jen něco naprogramovat, prostě by mě zajímalo, jak byste to řešili s ohledem na co největší optimalizaci, aby daná úloha trvala co nejkratší dobu.
tiso
Profil
1. Čo Ti bráni vyskúšať to?
2. Má význam optimalizovať funkciu ktorá má jeden riadok?
Pavel Strejček
Profil
Záleží jestli se jedná o pevný počet znaků v té shodě. Já bych to řešil asi tak:


function porovnej($str1, $str2) {
return substr($str1, -3) == substr($str2, -3);
}


Jsou samozřejmě i jiné možnosti. Jestli Ti jde o rychlost udělej si testy.
gaminn
Profil *
tiso
1) Právě, že jsem zkoušel funkci ereg, kde s těmito znaky problém samozřejmě byl, takže předpokládám, že i tady bude.
2) A proč ne, to, že je zápis jen na jeden řádek, neznamená, že provádění bude nejrychlejší.

Pavel Strejček
Tak to je přesně ono, řekl bych. Akorát jsem upravil funkci, aby nekontrolovala pevný počet znaků, ale celý řetězec, a dodělal jsem funkci, která podobným způsobem kontroluje, zda 1 řetězec obsahuje ten 2. na začátku:

function matchEnd($str1, $str2) {
return mb_substr($str1, - mb_strlen($str2)) == $str2;
}

function matchBeginning($str1, $str2) {
return mb_substr($str1, 0, mb_strlen($str2)) == $str2;
}
Toto téma je uzamčeno. Odpověď nelze zaslat.

0