Mikä on paras/tehokkain tapa korostaa hakusanat löydetystä tekstistä jos hakusanoja on monta? Hakusanat on arrayssa.
Tämmösen sain tehtyä, mutta ei varmastikaan ole parhain vaihtoehto.
foreach($hakusanat as $hakusana) $patterns[] = "/($hakusana)/"; $replacements = "<b>\${1}</b>"; $tuloste = preg_replace($patterns, $replacements, $string);
Tuo on ihan hyvä vaihtoehto, saman voi tietenkin tehdä myös näin:
foreach($sanat as $sana) { $teksti = str_replace($sana, "<b>$sana</b>", $teksti); }
Mutta jos merkittäviä sanoja ei ole ihan hirveästi, niin noihin molempiin tapoihin kuluu niin vähän aikaa, ettei sitä edes ehdi huomata. Siksi ei kannattane turhaan pohtia, mikä olisi se kaikkein parhain ja tehokkain tapa. :)
<? $teksti = str_replace($sana, "<b>$sana</b>", $teksti); ?>
Entäpäs jos hakusana on "seppo" ja tietokannassa on tekstin seassa sana "Seppo", toimiiko tämä silloin? Itse olen joskus kohdannut saman ongelman ja yritin stri_replace()-funktiolla, mutta en saanut toimimaan ihan oikein.
Eihän merkittäviä sanoja ole hirvittävästi, mut tekstit saattavat olla pitkiä ja käyttäjiä on paljon, joten koodin optimointiin kannattaa kiinittää jonkin verran huomiota. Mutta eiköhän jompakumpa noista vaihtoehoista ole tarpeeksi nopea tähän tarkoitukseen.
Eipä toi merkitsemis juttu toimi jos etsittävä on kirjoitettu pienel ja itse sana on isolla, eikä sen tarttekkaan, koska sanoja etsitään kirjoitus asun mukaan.
Tämä pätkä taas ei välitä mitään kirjoitus asusta.
$teksti = preg_replace("/($sana)/i", "<b>\${1}</b>", $teksti);
Aihe on jo aika vanha, joten et voi enää vastata siihen.