Autor Zpráva
o_O
Profil
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
** 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
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
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
Š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
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
blaaablaaa:
ale muzes taky takto
Juj, úplně jsem zapomněl na možnost uložení do proměnné. Díky ti :)
o_O
Profil
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.
o_O
Profil
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.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0