Autor Zpráva
Trojan
Profil *
Ahoj,
dal by se tento příkaz nahradit jiným příkazem, tak aby ve provedla záměna pouze jednoho slova?

$bfn = preg_replace('/pod|nad|u/', '', $bfn);

Jde mi o to, aby se z řetězce odstranilo jedno ze tří slov. Test se má provádět v tomto pořadí, takže pokud existuje "pod", odstraním pod, pokud neexistuje "pod", ale existuje "nad", odstraní se nad. Pokud neexistuje ani "nad", odstraní se "u "
Majkl578
Profil
Trojan:
Stačí ti str_replace, 4. parametr je referencí vracený počet nahrazení.
Someone
Profil
Majkl578:
Na to pouhe str_replace nestačí, přečetl jsi si pořádně zadání?
Trojan:
Z řetězce: Pod dubem na stromě u domu pod stolem na stole u dveří.
Co z toho má zniknout? Má se odstranit jen první Pod? Tudíž -> dubem na stromě u domu pod stolem na stole u dveří.
Nebo všechny Pod takže-> dubem na stromě u domu stolem na stole u dveří.
Majkl578
Profil
Someone:
přečetl jsi si pořádně zadání
Ale samozřejmě. A trvám na tom, že str_replace na to stačí.
Ze zadání vyplývá, že má seznam slov k nahrazení přičemž chce nahradit pouze první nalezené a dále už nepokračovat. Toho se tedy dá docílit poměrně snadno cyklem nad polem hledaných slov:
$search = ['pod', 'nad', 'u'];
$replaceBy = '';
$string = 'pod dubem na stromě';

foreach ($search as $word) {
  $string = str_replace($word, $replaceBy, $string, $replaced);
  if ($replaced) break; // nahrazeno, konec
}
Someone
Profil
Majkl578:
V tomto případě ano, ale pokud by chtěl Trojan odstranit všechna "POD" nebo "NAD" nebo "U", na základě toho, které z nich se vyskyzuje, tak by to nestačilo. Ze zadání není stoprocentně jasné, jak to má být, proto jsem se ptal:

Someone:
Trojan:
Z řetězce: Pod dubem na stromě u domu pod stolem na stole u dveří.
Co z toho má zniknout? Má se odstranit jen první Pod? Tudíž -> dubem na stromě u domu pod stolem na stole u dveří.
Nebo všechny Pod takže-> dubem na stromě u domu stolem na stole u dveří.

Nebo to jasné je, ale já jsem to z toho nevyčetl.
Trojan
Profil *
Díky za odpovědi. V textu je vždy jen jedna předložka.
Nakonec jsem to udělal takto:
     $bfn = preg_replace('/ pod | nad | u /', ' ', $bfn);
     $tmp = str_replace('  ', ' ', $tmp);
Protože jsem si uvědomil, že pod a u může být součástí celého slova, což odstranit nechci.


Oprava:
     $bfn = preg_replace('/ pod | nad | u /', ' ', $bfn);
     $bfn = str_replace('  ', ' ', $bfn);

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: