Re: preg_replace question
| From: | Merlin Morgenstern | Date: | Tue, 25 Jan 2011 12:04:31 +0000 |
| Subject: | Re: preg_replace question | ||
| References: | 1 2 3 4 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-311012@lists.php.net to get a copy of this message | ||
Am 25.01.2011 12:31, schrieb Merlin Morgenstern:
Am 24.01.2011 18:08, schrieb Alex Nikitin:HI Again :-) the building of my array seems fine. Here is what goes wrong: If you use this array: $internal_links = array(array('phrase'=>"Beagle Welpen", 'link'=>"http://wolframalpha.com"), array('phrase'=>"Welpen", 'link'=>"http://google.com")); Then it will fail as well. This is because the function will replace "Beagle Welpen" with the hyperlink and after that replace the word "welpen" inside the hyperlink again with a hyperlink. Is there a function which will not start looking for the words at the beginnning of the text for each replacement, but simply continue where it did the last replacement? Thank you for any help, MerlinIf you declare your arrays, and set k to 0 first, put quotes around array values and use the correct limit (you can default to -1), you will get results, here is code and example (hopefully this helps you) <?php function internal_links($str, $links, $limit=-1) { $pattern=array(); $replace=array(); $k=0; foreach($links AS $link){ $pattern[$k] = "~\b({$link['phrase']})\b~i"; $replace[$k] = '<a href="'.$link['link'].'">\\1</a>'; $k++; } return preg_replace($pattern,$replace,$str, $limit); } echo internal_links("süße knuffige Beagle Welpen ab sofort", array(array('phrase'=>"beagle", 'link'=>"http://google.com"),array('phrase'=>"welpen", 'link'=>"http://wolframalpha.com")), -1); Output: süße knuffige<a href="http://google.com">Beagle</a> <a href=" http://wolframalpha.com">Welpen</a> ab ~AlexHello, thank you all for your help. It seems that I am building the array wrong. Your code works with that array: $internal_links = array(array('phrase'=>"beagle", 'link'=>"http://google.com"),array('phrase'=>"welpen", 'link'=>"http://wolframalpha.com")); I am pulling the data out of a DB and am using this code: while ($row = mysql_fetch_object($result)){ $internal_links[$row->ID]['phrase'] = $row->phrase; $internal_links[$row->ID]['link'] = $row->link; } You build the array different, could you help me to adapt this on my code? I tried $internal_links['phrase'][] as well, but that did not help either. Thank you for any help, Merlin