2012-01-07 10 views
1
に格納された値から内部リンクを作成するには、

私は何を達成しようとしていることは次のようです。これらのキーワードは、mysqlテーブル(search = varchar(255)、link = varchar(255)の2つのフィールド)に格納されます。 クエリを使用して結果を取得し、配列に格納します。マッチワード(正規表現)と配列

私は、文字列内の単語を検索し、単語にアンカーを追加したいです。重要なビットは(私が問題があるところでは)検索が大文字と小文字を区別しなければならないということです。例えば

$searchFor = array("sun","sunny","wind","crap"); 
$linkArray = array("/solar","/solar","/wind-energy","/toilet"); 

文字列:

あなたが日について何を知っていますか?サン、どんな言葉ですか?それは風のような何か ですか?風、別の奇妙な言葉。このテキストは です。

結果のように、私が欲しいもの:

あなたがsunについて何を知っていますか? Sunそれはどんな言葉ですか?それはちょうどwindのようなものですか? Wind別の奇妙な言葉。この文章は完全にcrapです。

$string = 'What do you know about the sun? Sun, what kind of word is that? Is it something just like wind? Wind, another weird word. This text is complete crap by the way.'; 
$pattern = "/(\w+)/i"; 
preg_match_all($pattern, $string, $matches); 

foreach($matches[0] as $i => $word) 
{ 
    $search = strtolower($word); 
    if(in_array($search,$searchFor)) 
    { 
     $pos = array_search($search,$searchFor); 
     $link = $linkArray[$pos]; 
     echo "<a href=\"{$link}\">{$word}</a> "; 
    } 
    else 
    { 
     echo $word." "; 
    } 
} 

しかし、私は(私はこれが正しい道だと思います)正規表現を使用して立ち往生:

私が持っているコードです。

$replacement = '<a href="{$link}">${1}</a>'; 

これは可能ですか?

ありがとうございます。

答えて

1

Testet!

<?php 
$searchFor = array("sun","sunny","wind","crap"); 
foreach($searchFor as $iKey => $sVal) { 
    $searchFor[$iKey] = "/(" . $sVal . ")/i"; 
} 
$linkArray = array("/solar","/solar","/wind-energy","/toilet"); 
foreach($linkArray as $iKey => $sVal) { 
    $linkArray[$iKey] = '<a href="' . $sVal . '">$1</a>'; 
} 
$string = 'What do you know about the sun? Sun, what kind of word is that? Is it something just like wind? Wind, another weird word. This text is complete crap by the way.'; 
echo preg_replace($searchFor, $linkArray, $string); 
+0

ありがとうございました!完璧に動作します! – FinchSol