2012-07-30 2 views
2

자동 전자 메일을 만들 때 전자 메일의 특정 부분을 저장된 데이터로 교체해야합니다.문자 사이에 문자열의 내용을 바꾸는 PHP 빠른 방법

예 : %first_name% %surname% 님, 안녕하세요. %place_name%에 참석해 주셔서 감사합니다.

이 작업은 각각에 대해 문자열 바꾸기를 사용하여 수행 할 수 있지만 더 빠른 방법이 있어야합니다.

변수 이름이 우리가 시스템에서 원하는 것과 동일하다고 가정합니다. %first_name%은 .... $user['first_name'] 등으로 대체되어야한다

답변

2

당신은 배열 값으로 % 년대 사이에 키를 대체 할 preg_replace_callback을 활용할 수 있습니다 :

$fields = array('first_name' => 'Tim', 'place_name' => 'Canada'); 

$string = preg_replace_callback('/%(.+?)%/', function($arr) use($fields) 
{ 
    $key = $arr[1]; 
    return array_key_exists($key, $fields) ? $fields[$key] : $arr[0]; 
}, $string); 
+0

영리한 사용, PHP – Kristian

+0

의 최신 버전이 필요 @Kristian : PHP 5.3, 익명 함수 구문이 도입 된 버전, 3 년 전에 출시되었습니다. 나는 그것을 더 새로운 것으로 생각하지 않을 것이며 모든 사람들이 적어도 그 버전으로 업그레이드되기를 희망합니다. –

+0

은 코드/버전 요구 사항의 파워를 과소 평가해서 절대로 업그레이드를 느리게합니다. – Kristian

2

하나의 옵션 :

$vars = array(
    'firstname' = 'Bob', 
    'surname' = 'Dole', 
    'place' = 'Las Vegas', 
    // ... 
); 
extract($vars); 
include('my_template.phtml'); 

그리고 my_template에서 .phtml :

<?php 
echo <<<EOF 
    Dear $firstname $surname,<br> 
    Thank you for attending the Viagra and Plantains Expo in $place. 
EOF; 
?> 

f : extract()을 사용하는 동안 이름 충돌이 걱정된다면 언제든지 EXTR_PREFIX_ALL 옵션이나 다른 추출 방법 중 하나를 사용할 수 있습니다.

또는 더 나은 방법은 바퀴를 재발 명하지 마십시오. Smarty 또는 mustache.php을 사용해주세요.

또한이 질문을 참조하십시오 : 폐쇄의 PHP template class with variables?

+0

+1 뷰를 출력하는 것과 같습니다. – Kristian

+0

@Kristian : 네, CakePHP와 다른 많은 프레임 워크/라이브러리가 있습니다. 이 방법은 보통 출력 버퍼링과 같은 추가 기능을 가지고 있지만 Cake 2.0에서는 블록보기와 상속을 볼 수 있습니다. –

관련 문제