mctoys Posted October 22, 2011 Share Posted October 22, 2011 Hi Guys I'm sure this is really simple for you experts but it's proving to be my nemesis! I have an array of words: eg. $words = array('Apples','Bananas','Cherries'); and would like to search a string of text for these words and create link tags around them based on a simple template, <a href="#">$word_found</a> $text = "I love eating apples and bananas but hate cherries!"; So i would like to return a string like this: $text = "I love eating <a href=#>apples</a> and <a href="#">bananas</a> but hate <a href="#">cherries!</a>"; Now, I need it to do a case insensitive search, but just wrap tags around the words it finds, leaving the case as it was found in the string. I want to avoid using a function where I have to list all the replacements like this: function replace_text($text){ $replace = array('apples' => '<a href="#">apples</a>','bananas' => '<a href="#">bananas</a>'); $text = str_ireplace(array_keys($replace), $replace, $text); return $text; } because it seems very messy and long winded. Also it's not case insensitive. It seems like there must be a way of simply searching for the words in my array and wrapping tags around the found words. Please can anyone help!? Many Thanks Dan Link to comment https://forums.phpfreaks.com/topic/249590-complicated-string-replace/ Share on other sites More sharing options...
mctoys Posted October 22, 2011 Author Share Posted October 22, 2011 Hmm Ok - so no immediate replies - maybe I'm asking the wrong questions! So i've been playing around with the script and would be happy to use the str_replace method if I can dynamically populate the array which handles the keywords and tags. Here is what I have: <?php $words = array('Ben','Tim','John'); $text = 'Me and my friends John Tim and Ben went to the park.'; $replace = array(); foreach($words as $word) { array_push($replace[$word], "<a href=\"#\">".$word."</a>"); } $newtext = str_replace(array_keys($replace), $replace, $text); ?> The problem is, my array_push doesn't work, it outputs this: Array ( [ben] => [Tim] => [John] => ) Me and my friends and went to the park. Any ideas? Link to comment https://forums.phpfreaks.com/topic/249590-complicated-string-replace/#findComment-1281365 Share on other sites More sharing options...
PFMaBiSmAd Posted October 22, 2011 Share Posted October 22, 2011 You can use preg_replace to do this. The following can be modified to do what you are asking - <?php $str = "this is my test string and string is very long with so many words"; $search = "my|string|with|words"; $str = preg_replace("/($search)/is","<a href='/index.php?word=$1'>$1</a>",$str); echo $str; ?> $search in the above can be produced by imploding your $words array using the '|' character. Link to comment https://forums.phpfreaks.com/topic/249590-complicated-string-replace/#findComment-1281369 Share on other sites More sharing options...
mctoys Posted October 22, 2011 Author Share Posted October 22, 2011 Quote You can use preg_replace to do this. The following can be modified to do what you are asking - <?php $str = "this is my test string and string is very long with so many words"; $search = "my|string|with|words"; $str = preg_replace("/($search)/is","<a href='/index.php?word=$1'>$1</a>",$str); echo $str; ?> $search in the above can be produced by imploding your $words array using the '|' character. Oh wow - that's a thousand times easier than what I was trying to do!! Thanks so much!! Link to comment https://forums.phpfreaks.com/topic/249590-complicated-string-replace/#findComment-1281371 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.