2012-01-07 3 views
1

달성하고자하는 것은 다음과 같습니다. 뉴스 항목을 만들 때 PHP가 키워드에 대해 이러한 항목을 확인하도록합니다. 이러한 키워드는 mysql 테이블에 저장됩니다 (search = varchar (255), link = varchar (255) 필드). 쿼리를 사용하여 결과를 가져 와서 배열에 저장합니다.단어를 일치시키고 (정규식) 배열에 저장된 값으로 내부 링크를 만듭니다.

문자열에서 단어를 찾고 해당 단어에 앵커를 추가하고 싶습니다. 중요한 비트는 (내가 어려움이있는) 검색이 대소 문자를 구분해야한다는 것입니다. 예를 들어

:

$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

관련 문제