Autor Zpráva
_Martin_
Profil *
Ahoj. Mám zajímavý úkol s nahrazením:

Máme proměnnou:
$promenna = 'Lorem ipsum dolor sit amet %1neco%, consectetur adipisici elit,
sed eiusmod tempor %neco2% incidunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut %ne3co%  aliquid ex ea commodi consequat.'


Dále máme definovaný výraz:
$vyraz = 'hala bala neco2 hala bala';


Výrazy %neco% je potřeba nahradit za jeden ze dvou tvarů podle toho, zda je jejich text obsažen v proměnné $vyraz.
V případě, že v některém výrazu %neco% je alespoň část proměnné $vyraz, měl by se nahradit např. za "XXX", všechny ostatní výrazy %neco% by měly být nahrazeny za "ZZZ".

Výsledek by měl vypadat takto:


$promenna = 'Lorem ipsum dolor sit amet ZZZ, consectetur adipisici elit,
sed eiusmod tempor XXX incidunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut ZZZ  aliquid ex ea commodi consequat.'


PHP kabrňákům to asi půjde dost jednoduše, ale na mou hlavu je to asi moc :-( Poradí někdo? Děkuju.
ShiraNai7
Profil
_Martin:
V případě, že v některém výrazu %neco% je alespoň část proměnné $vyraz, měl by se nahradit např. za "XXX"

Co je "část proměnné výraz"? Z Výsledek by měl vypadat takto“ absolutně nechápu co tím myslíš. Taky nechápu účel těch čísel mezi % a %. A proč je %neco2% považováno za „alespoň část proměnné $vyraz“ ale %1neco% spadá do „všechny ostatní výrazy“? Nevidím v tom žádnou logiku.
_Martin_
Profil *
Prostě v prvé řadě je potřeba vyhledat všechny části textu, které jsou uzavřeny v procentech. V tomto případě jsou tři.

Ve druhém kroku je potřeba vzít každou z těchto tří částí a zjistit, zda je obsažena v proměnné $vyraz. Pokud ano, nahradit ji za "XXX", pokud ne, nahradit ji za "ZZZ".

Omlouvám se, že to neumím líp vysvětlit. To zadání je fakt blbé. Ale uvnitř aplikace to logiku má (není důležité rozebírat to dál, nemá to na řešení žádný vliv, jen by to bylo ještě složitější).
_Martin_
Profil *
Jinak %neco2% je považováno za část proměnné $vyraz proto, protože se v obsahu proměnné vyskytuje (narozdíl od ostatních):

$vyraz = 'hala bala neco2 hala bala';
YoSarin
Profil
$promenna = 'Lorem ipsum dolor sit amet %1neco%, consectetur adipisici elit,
sed eiusmod tempor %neco2% incidunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut %ne3co%  aliquid ex ea commodi consequat.';

$out = preg_replace_callback('~\%([^\%]+)\%~', function ($matches) {
		$vyraz = 'hala bala neco2 hala bala';
		if (strpos($vyraz, $matches[1]) !== false) {
			return 'XXX';
		} else {
			return 'ZZZ';
		}
	}, $promenna
);
_Martin_
Profil *
YoSarin
Krása. Díky moc, zatím s tím bojuju, ale je to na dobré cestě. Funkci preg_replace_callback jsem vůbec neznal. Tady je to fakt samý guru :-)

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:

0