2010-05-13 4 views
0

나는 (이 문맥에서는 중요하지 않은) Joomla 플러그인을 가지고 있는데, 이것은 텍스트의 단락 안에서 숫자가 많은 입력을 받아 일련의 s로 대체하도록 고안되었습니다.preg_replace를 사용하여 값 바꾸기

내 문제는 내 $ article-> text에서 preg_replace를 수행해야하지만, 일치하는 용어에 변경 사항을 적용하는 방법을 모른다. preg_replace_callback을 본 적이 있지만 함수 내에서 호출 할 수있는 방법을 모르겠습니다.

function onPrepareContent(&$article, &$params, $limitstart) 
    { 
     global $mainframe; 
     // define the regular expression 
     $pattern = "#{lotterynumbers}(.*?){/lotterynumbers}#s"; 
     if(isset($article->text)){ 
      preg_match($pattern, $article->text, $matches); 
      $numbers = explode("," , $matches[1]); 
      foreach ($numbers as $number) { 
       echo "<div class='number'><span>" . $number . "</span></div>"; 
      } 
     }else{ 
      $article->text = 'No numbers'; 
     } 
     return true; 
    } 

개정 된 코드 :

function onPrepareContent(&$article, &$params, $limitstart) 
    { 
     global $mainframe; 
     // define the regular expression 
     $pattern = "#{lotterynumbers}(.*?){/lotterynumbers}#s"; 
     if(isset($article->text)){ 
      preg_match($pattern, $article->text, $matches); 
      $numbers = explode("," , $matches[1]); 
      foreach ($numbers as $number) { 
       $numberlist[] = "<div class='number'><span>" . $number . "</span></div>"; 
      } 
      $numberlist = implode("", $numberlist); 
      $article->text = preg_replace($pattern, $numberlist, $article->text); 

     }else{ 
      $article->text = 'No numbers'; 
     } 
     return true; 
    } 
+0

작동합니다 내가 당신을 도울 수 있도록 전에 그 기능을 사용했습니다하지만 당신은 나를 설명해야 더 나은 질문 – mck89

+0

죄송합니다. 제가 다시 읽었을 때,이 말이 맞는지 궁금합니다. 나는 그걸 원하는 효과로 다시 작성했지만, 성가신 것처럼 보입니다. 원하는 결과는 다음과 같습니다 1) 각각 3 주위 사업부를 텍스트 2) 숫자 (CSV 추출의 용어 {lotterynumbers}을 찾기) 및 랩) $의 article-로 다시 펌프> 텍스트 나 ' 내 수정 된 코드를 질문에 넣었습니다 – Jeepstone

+0

수정 된 기능이 작동하지 않는 이유는 무엇입니까? 괜찮아 보인다. – mck89

답변

1
function onPrepareContent(&$article, &$params, $limitstart) 
{ 
    global $mainframe; 
    // define the regular expression 
    $pattern = "#{lotterynumbers}(.*?){/lotterynumbers}#s"; 
    if(isset($article->text)){ 
     $article->text=preg_replace_callback($pattern,create_function('$match','$init="<div class=\'number\'><span>";$out="</span></div>"; return $init.implode($out.$init,explode(",",$match[1])).$out;'),$article->text); 

    }else{ 
     $article->text = 'No numbers'; 
    } 
    return true; 
} 

나는 그것을 테스트하지했지만 그것은

+0

감사 mck89. 나는 두 가지 방법이 모두 효과가 있지만 답변을 제공해 주셨습니다. 유지 보수성/가독성 대 기술적 솔루션의 경우입니다. 두 경우 모두를 참조 할 때 유용합니다. 피트 – Jeepstone

관련 문제