2011-10-17 2 views
2

강조 단어와 같은 각 검색 단어에 대해 HTML 태그를 래핑하는 방법. 여기에 내 코드를 시도했지만 아무 것도 변경되지 않았습니다. 문제가있는 곳이나 다른 좋은 방법이 있습니까? 감사.PHP 각 검색 단어에 대해 HTML 태그를 래핑하는 방법

<?php 
$sentence = "for loops are the most complex loops in PHP. They behave like their C counterparts";//original 
$search = 'php counterparts';//search words 
$str = explode(' ',$search);//explode every search word 
for($i=0;$i<10;$i++){ 
    if($str[$i]!=''){ //make sure if $str[$i] is not empty, do $newstr. 
     $newstr .= '\'<b>'.$str[$i].'</b>\','; //wrap <b> tag for search words 
    } 
} 
$newstr = substr($newstr, 0, strlen($newstr)-1);//remove last common, combine a array 

$new = str_ireplace(array($str),array($newstr),$sentence); 
echo $new; 
?> 
+0

당신은 더 나은 당신이 일을하려고하는 무엇인지 설명 할 수 있습니까? 매우 주석이 달린 코드는 일을 결코 설명하지 않습니다. 달성하려는 결과물은 무엇입니까? – JRSofty

답변

3

배열을 10 번 반복하는 이유는 무엇입니까? 왜 수정 된 단어를 저장하기 위해 문자열을 사용합니까? 이유는 정규식 demarcations 때 대체 정규식 함수를 사용하지?

도이 코드를 수정하지 마십시오 - 처음부터 다시 시작합니다

$sentence = "for loops are the most complex loops in PHP. They behave like their C counterparts";//original 
$search = 'php counterparts';//search words 
$srch_words = explode(' ',$search);//explode every search word 
$replace_words=array(); 
foreach ($srch_words as $key=>$val) { 
    $replace_words[$key]='<b>' . $val . '</b>'; 
} 
$sentence=str_ireplace($srch_words, $replace_words, $sentence); 
0

나는이 방법을 시도 할 것이다. 더 많은 실패와 적은 색인 번거 로움. 조금 느려질 수도 있지만 문제가되지는 않습니다.

<?php 
function highlightWords(array $words, $text) { 
    $pattern = '#('; 
    for ($i=0; $i<sizeof($words); ++$i) { 
     $pattern .= ($i > 0) ? '|' : ''; 
     $pattern .= preg_quote($words[$i]); 
    } 
    $pattern .= ')#i'; 
    return preg_replace_callback($pattern, 'highlightMatch', $text); 
} 
function highlightMatch ($matches) { 
    return sprintf('<b>%s</b>', $matches[0]); 
} 

적은 꽤 있지만, 어쩌면 더 빨리는 다음과 같습니다

<?php 

$words = array('blue', 'red'); 
foreach ($words as $word) { 
    $matchWords[] = "/$word/i"; 
} 
$string = 'Red, orange, yellow, green, blue, indigo, violet. More red, bluebell'; 

$string = preg_replace($matchWords, '<span class="keyword">$0</span>', $string); 

echo $string; 

겠습니까 출력 :

<span class="keyword">Red</span>, orange, yellow, green, <span class="keyword">blue</span>, indigo, violet. More <span class="keyword">red</span>, <span class="keyword">blue</span>bell 

그런 다음 CSS를 사용할 수 있습니다

<?php 
function highlightWords (array $words, $text) { 
    $find = array(); 
    $replace = array(); 
    foreach ($words as $word) { 
     $find[] = $word; 
     $replace[] = sprintf('<b>%s</b>', $word); 
    } 
    return str_replace($find, $replace, $text); 
} 
2

이 하나 개의 방법이 될 것입니다 강조 표시를 적용합니다. 정규식을 수정하여 전체 단어를 일치 시키길 원할 수도 있습니다.

+0

그 주제에 대해 최고의 답을 찾았습니다. 고마워요! – medoingthings

+0

나는이 코드를 사용했으며, 대부분이 코드는 훌륭하게 작동한다. 그러나이 예제와 동일합니다. matchWords에 'span'이 포함되어 있으면 기존 span 단어를 span 태그로 감싸고 그 결과는 엉망이됩니다. 어떻게 해결할 수 있을지 제안 해 주시겠습니까? – galdikas

1
$str = "for loops are the most complex loops in PHP. They behave like their C counterparts";//original 
$search = 'PHP counterparts'; 
$explode = explode(" ", $search); 

foreach($explode as $word){ 
    $str = preg_replace("/$word/i", '<strong>$0</strong>', $str); 
} 

echo $str; 
관련 문제