2011-10-04 25 views
0

我使用preg_replace作爲buzzword類型的功能,使用流行語的列表,在文章中搜索它們,然後使用preg_replace在它們周圍包裹鏈接。preg_replace efficiency

我的流行語是:

Online Marketing 
Social Media Markeing 
Social Media 
Social 
Brand Marketing 
Brand 
Search Engine Optimisation 
SEO 
Email Marketing 
Email 
Twitter 
Facebook 
LinkedIn 

,我做我的preg_replace這樣的...

$text = preg_replace("/Online Marketing/", "<a href='".$base."online-marketing/'>Online Marketing</a>", $text); 

但問題是,我不得不像這樣每個可能的變化做了preg_replace ...

$text = preg_replace("/Online Marketing/", "<a href='".$base."online-marketing/'>Online Marketing</a>", $text); 
$text = preg_replace("/Online marketing/", "<a href='".$base."online-marketing/'>Online marketing</a>", $text); 
$text = preg_replace("/online marketing/", "<a href='".$base."online-marketing/'>online marketing</a>", $text); 

這是一個非常長的囉嗦,現在我知道我可以使用str_reray訂貨量大這樣的:

$from = array("Online Marketing", "Online marketing", "online marketing"); 
$name = str_replace($from, "", $text); 

,但我看不出發現的一種方式,其陣列的一部分匹配,然後用正確的鏈接替換它,你可以看到str_replace函數以上只是完全刪除我的流行語,它只是一個例子。

所以我想知道是否有人能夠幫助我找到一種在str_replace或preg_replace中使用流行語數組的方法,但也要確保它使用正確的鏈接來取消流行詞。

希望有人能幫助

+0

我已經得到了所有工作現在和完成,謝謝大家,我會明天張貼代碼我是如何做的,因爲我需要等待8小時,因爲我只有61 Rep – lukehillonline

回答

0

我把所有的答案的混合物,這是我的最終結果...

$Fbuzzwords = array(" online marketing", " social media marketing", " social-media-marketing", " social media", 
       " social", " brand marketing", " brand", " search engine optimisation", " seo", " email marketing", 
       " email", " e-mail marketing", " e-mail", " tiwtter", " facebook", " linkedin"); 

$Ubuzzwords = array("online-marketing", "social-media-marketing", "social-media-marketing", "social-media-marketing", 
       "social-media-marketing", "brand-marketing", "brand-marketing", "search-engine-optimisation", 
       "search-engine-optimisation", "online-marketing", "online-marketing", "online-marketing", 
       "online-marketing", "social-media-marketing", "social-media-marketing", "social-media-marketing"); 

$i = 0; 

foreach ($Fbuzzwords as $buzzword) 
{ 
    $url = $Ubuzzwords[$i]; 

    $Rbuzzwords = array(" <a href='".$base.$url."/'>online marketing</a>", " <a href='" 
.$base.$url."/'>social media marketing</a>", 
       " <a href='".$base.$url."/'>social-media-marketing</a>", " <a href='".$base.$url."/'>social media</a>", 
       " <a href='".$base.$url."/'>social</a>", " <a href='".$base.$url."/'>brand marketing</a>", 
       " <a href='".$base.$url."/'>brand</a>", " <a href='".$base.$url."/'>search engine optimisation</a>", 
       " <a href='".$base.$url."/'>seo</a>", " <a href='".$base.$url."/'>email marketing</a>", 
       " <a href='".$base.$url."/'>email</a>", " <a href='".$base.$url."/'>e-mail marketing</a>", 
       " <a href='".$base.$url."/'>e-mail</a>", " <a href='".$base.$url."/'>tiwtter</a>", 
       " <a href='".$base.$url."/'>facebook</a>", " <a href='".$base.$url."/'>linkedin</a>"); 

    $replacement = $Rbuzzwords[$i]; 

    $text = preg_replace("/$buzzword/i", "$replacement", $text); 

    $i++; 
} 

所以我有3個陣列,1對找詞頁面和2的url,我循環雖然所有的文本的每個部分的陣列,確保我抓住每一個案例

2
$test = preg_replace("/online marketing/i", "<a href='".$base."'online-marketing/'>$0</a>, $text); 

或者,如果維持資本並不重要:

$test = str_ireplace("online marketing", "<a href='".$base."'online-marketing/'>online marketing</a>, $text); 
+0

我明白所以'/我'會在所有病例類型中搜索字符串?那麼輸出呢?它會識別大寫字母的位置並將它們輸出到同一個地方嗎? – lukehillonline

+0

$ 0將被放置在匹配的位置,大小寫保留。 –

+0

@AdriftUniform:是的,它會用匹配的字符串替換$ 0,就像它一樣。 (Ps。Kolink,你的例子中缺少一些雙引號。) –

0

功能的preg_replace可以收到更換的第二個陣列。 如果你要始終使用相同的語法,你可以做一個循環來生成鏈接(而不是你自己每次寫它,你想有一個元素)

$base = 'base/'; 
$from = array("Online Marketing", "Online test", "offline test"); 
$to = array(); 
foreach($from AS $key=>$f) { 
    $from[$key] = "/".$f."/";  
    $to[$key]="<a href='".$base.$f."/'>online marketing</a>"; 
} 
$string = 'this is a test using Online Marketing and offline test'; 
$text = preg_replace($from, $to, $string); 
+0

我看到你在這裏做什麼,但我不認爲它相當我在找什麼,謝謝你 – lukehillonline

0

您可以使用str_ireplace()與數組(這是一個不區分大小寫的匹配字符串替換),所以如果找到了某個匹配項,它將用另一個數組中的相應替換項替換它。

EG:

$needles = array("Online Marketing", "Online Games", "Online Shopping"); 

$replacements = str_replace('<a href="online_marketing.html>Online Marketing</a>"', 
          '<a href="online_games.html">Online Games</a>', 
          '<a href="online_shopping.html">Online Shopping</a>'); 

    $replaced = str_ireplace($needles, $replacements); 

    // Show the replaced text 
    echo $replaced; 
); 
+0

我需要它區分大小寫,所以我將使用pre_replace(「/.../i」,「」,$ text); – lukehillonline