Manipola i paragrafi HTML in php

Possibile duplicato:
Evidenzia le parole chiave in un paragrafo

Ecco un'altra domanda per te. Ho un piccolo problema in php e ho pensato prima di trovare una soluzione extra-ordinaria da solo lì forse un modo più semplice e veloce per risolvere il problema.

Supponendo che abbia una string che contiene tag di paragrafo HTML come:

$string="<p>Hello this is nick</p> <p>i need some help over here</p> <p></p><p>Does anyone know a solution</p>" 

E una serie di punture che contiene alcune parole "indizio":

 $arrays=("Hello","nick", "help", "anyone", "solution") 

Vorrei ora eseguire le operazioni seguenti: Emettere la $string in un browser, ma le parole "clue" dovrebbero avere un formato speciale, ad esempio grassetto o evidenziato.

    Ciò che mi fa trovare un po 'difficile è che voglio mantenere i paragrafi così come sono. In altre parole, voglio che l'output finale appaia esattamente come l'originale (comprese le nuove linee / nuovi paragrafi) ma con alcune parole in grassetto

    Ho pensato che avrei potuto usare strip_tags per rimuovere i <p> e </p> e quindi dividere la string restituita per spazi. In modo da get una serie di parole. Quindi emetterei each parola singolarmente controllando se quella parola è contenuta $arrays . Se sì, allora sarebbe emesso con uno stile audace.

    In questo modo ho chiaramente perso la nozione di nuovi paragrafi e tutti i paragrafi saranno uniti in uno solo.

    C'è un modo semplice per risolverlo? Ad esempio un modo per avere la consapevolezza che ad esempio la parola "Ciao" inizia in un nuovo paragrafo? O c'è qualcos'altro che posso fare?

    Basta sostituire le parole con versioni formattate di se stessi. La regex di seguito mantiene il caso e sostituisce solo le parole complete (in modo che per esempio nella parola "snicker" la parola "nick" al suo interno non venga sostituita).

     preg_replace( '/\b('.implode( '|', $arrays ).')\b/i', '<em>$1</em>', $string ); 

    Perché non sostituire semplicemente le tue parole chiave direttamente?

     $string = str_ireplace(arrays('hello', 'nick'), arrays('<strong>hello</strong>', '<strong>nick</strong>'), $string); 

    (ovviamente il secondo arrays passato alla function sarebbe stato generato in anticipo)

    usa str_replace e sostituisci le parole con etichette in grassetto intorno a loro