2014-04-16 23 views
0

我有一個hashtag系統:(注意:$ body是一個變量,它是用戶提交的帖子,標籤在帖子中。)我試圖用正則表達式做這個,但是發現這種方法同樣有效,並且易於遵循。從php數組元素創建超鏈接

<?php 
$string = $body; 
$htag = "#"; 
$arr = explode(" ", $string); 
$arrc = count($arr); 
$i = 0; 

    while($i < $arrc) { 
     if(substr($arr[$i], 0, 1) === $htag) { 
      $arr[$i] = "<a href = 'category.php?#=$arr[$i]'>".$arr[$i]."</a>"; 
     } 
      $i++; 
    } 

$string = implode(" ", $arr); 

?>

然後,$string將在後面的頁面迴盪。

我的問題是,我的方法使用php數組元素將hashtag鏈接到類別頁面。在這個頁面上,我想調用「hashtaged」這個單詞,並使用mysql查詢來獲取包含hashtags的帖子。然而,當我打電話$arr[$i],待迴盪,我得到一個錯誤:

Undefined offset: 1 on the line in which I call this array element into another variable.

有什麼辦法,我可以完成一個更好和更有效的方式這個任務?

+0

你sh應該考慮'preg_split(「\\ b」,$ string)'而不是'explode(「」,$ string);'。 '\ b'知道字的邊界,所以字符串:'「這是一個#標籤。」'會給你'#標籤'而不是#標籤。 – Halcyon

+0

即使你沒有得到一個錯誤,我真的不認爲'category.php?#= $ arr [$ i]'會做你想做的事情。 –

+0

Patrick,會有更好的解決方案來實現這個超鏈接嗎? – user3513120

回答

0

好的,所以這可以大大簡化使用一些正則表達式和PHP的preg_replace函數。 @Doge是在正確的軌道上,但在我的測試中,\b沒有完全給出我認爲你想要的結果。

基本上,你幾乎可以取代你有什麼用

$newText = preg_replace("/#(\w+)/", "<a href='category.php?tag=$1'>#$1</a>", $text); 

如...

$text = "This is a #hashtag within some #awesometext."; 

$newText = preg_replace("/#(\w+)/", "<a href='category.php?tag=$1'>#$1</a>", $text); 

echo $newText; 

這樣做的結果將是所有...

This is a <a href='category.php?tag=hashtag'>#hashtag</a> within some <a href='category.php?tag=awesometext'>#awesometext</a>. 

See it in action here

+0

如果我使用了這個,我可以做些什麼來替換implode函數以回顯鏈接的hashtag? (正如你可能知道的那樣,我對正則表達式不是很熟悉。):( – user3513120

+0

@ user3513120你看過鏈接的例子嗎?只是回顯'preg_replace'的結果,它會輸出帶有標記詞的輸入文本與這些單詞的鏈接版本 –

+0

對不起,我的錯誤,我試圖結合原來的和這種方法,但是,我的主要問題是與頁面的htags鏈接也如何,我會採取在這個腳本中的信息,並使用它可以從另一個頁面上的數據庫中找到所有帖子? – user3513120