Autor | Zpráva | ||
---|---|---|---|
o_O Profil |
#1 · Zasláno: 19. 5. 2011, 07:17:27
Dobré ráno,
již pár dní hledám vhodné řešení ale nikde nic, proto se obracím na Vás. Potřeboval bych najít v stringu $string='Jablko skákalo okolo dokola a meloun začal nervózně mlátit hruška.'; část textu z pole podle pořadí v kterém je napsán, například: $hledej=array('jablko','hruška','meloun'); $nahrad=array('Jabko','Hruška','Melounek'); // najde jablko, vypíše jabko. Hruška a meloun zůstává stejný. Jde o to, že potřebuji pouze první výsledek (tedy v tomto případě jablko, ostatní vynechat). Nechtěl jsem do toho zbytečně tahat for(), pokud je ještě malá naděje na jiné řešení. Napadá Vás něco? Předem děkuji. |
||
o_O Profil |
#2 · Zasláno: 19. 5. 2011, 07:18:36
** nejde mi o replace, potřebuji prostě jen ten text z druhého pole (ten je k prvnímu ve vztahu klíč:klíč2 ~ 1:1).
|
||
Keeehi Profil |
#3 · Zasláno: 19. 5. 2011, 09:30:45
o_O:
„že potřebuji pouze první výsledek“ První výsledek dle pole, nebo dle stringu? Tudíž, kdyby ve stringu na začátku chybělo to jabko, co by se mělo vrátit? Hruška nebo meloun? |
||
o_O Profil |
#4 · Zasláno: 19. 5. 2011, 14:49:41
Hruška.
Pro lepší příklad: $string='abcdefghijklmnopqrstuwdxyz'; $hledej=array('abcdefghijklmnopqrstuwdxyz','abcdefghijklmnop','abcd','a'); // první najde abcdefghijklmnopqrstuwdxyz, ostatní vynechá. Je to psané ve funkci (které dodávám string). |
||
o_O Profil |
#5 · Zasláno: 19. 5. 2011, 14:59:30
Šlo by to přes for()
for($i=0;$i<count($hledej);$i++) if(substr_count($string,$hledej[$i])>0) return $nahrad[$i]; Ovšem rád bych se tomuto řešení vyhnul (v případě, že by bylo pomalejší). |
||
blaaablaaa Profil |
#6 · Zasláno: 19. 5. 2011, 15:22:50
o_O:
1. ve svem prikladu bys mel pouzit substr_count()!==false 2. Zalezi kde a jak to chces pouzivat, ale muzes taky takto (za predpokladu, ze mas escapovane $hledej) preg_match("#".implode("|", $hledej)."#", $string, $match); |
||
o_O Profil |
#7 · Zasláno: 19. 5. 2011, 15:39:02
blaaablaaa:
„ale muzes taky takto“ Juj, úplně jsem zapomněl na možnost uložení do proměnné. Díky ti :) |
||
Časová prodleva: 7 dní
|
|||
o_O Profil |
#8 · Zasláno: 26. 5. 2011, 07:25:56
Tak jsem to vyzkoušel. Jednalo se mi o detekci prohlížeče a OS, ale vyskytla se chyba...
Kód vypadá následovně: $string='mozilla/50(windows;u;windowsnt61;en-us)applewebkit/5347(khtml,likegecko)chrome/7051744safari/5347'; $hledej=array('windowsnt61','win'); $nahrad=array('Windows 7','Windows (ostatní)'); Použil jsem preg_match z [#6], ovšem prvně najde "win", pak až "windowsnt61" (on tedy "windowsnt61" nenajde, jen v případě, že zruším "win" z $hledej). V mozille vše funguje jak má: OS: Windows 7 Prohlížeč: Mozilla Firefox 4 mozilla/50(windowsnt61;wow64;rv:201)gecko/20100101firefox/401 Potřebuji hledat postupně podle $hledej, ne podle první shody. Nevíte někdo, co s tím? Předem dík moc. :-) // PS: Opera a mozilla odesílají jen "windowsnt61" -> funguje; Safari a chrome odesílají před "windowsnt61" i "windows" -> nefunguje. |
||
Časová prodleva: 4 dny
|
|||
o_O Profil |
#9 · Zasláno: 29. 5. 2011, 23:37:25
blaaablaaa:
„1. ve svem prikladu bys mel pouzit substr_count()!==false“ Jako prozatimní řešení jsem použil ten for. Ovšem toto mi nefungovalo (vracelo vždy první výsledek). Ovšem to stále neřeší můj problém. Není tady někdo, kdo by mi mohl poradit? Potřeboval bych prostě regulár donutit k tomu, aby hledal podle $hledej, ne podle stringu. Jelikož když v stringu najde "windows" automaticky v reguláru přiřadí "win" a skončí. Pro tento účel prostě potřebuji, aby hledal podle regulárního výrazu od začátku do konce (windowsnt61|win) <- hledá první windowsnt61. |
||
Časová prodleva: 13 let
|
0