2013-01-24 3 views
1

한 번 실행 된 db 정보로 대체해야하는 "자리 표시 자"가 포함 된 변수가 있습니다. 이것은 일반 이메일을 만들기위한 것입니다.PHP, 변수에서 자리 표시 자 가져 오기

$emailBody = "Dear [-first_name-] [-last_name-]"; 

그때 FIRST_NAME & LAST_NAME 대한 DB를 호출하여 적절한 값으로 그 자리를 대체한다 : 여기

변수의 일례이다.

지금 내 최종 목표는 이러한 주요 용어를 찾아로를 설정하는 것입니다 :

$emailBody = "Dear John Smith"; 

그래서 나는 내가 찾고 배열로 값을 폭발 할 수있는 방법이 필요 추측 [- -] 다음을 수행 수정 $ emailBody를 수정 된 변수와 동일하게 만드십시오. 각 세트 [- -]를 찾는 방법을 찾는 데 어려움을 겪고 있습니다.

+0

로 $ emailBody을 떠나 사용할 수 있습니다 문자열이지만, 나는'preg_replace_callback()'을 선호한다. –

답변

2

당신이 좋아하는 일을 할 수있는 것은 :

$emailBody = "Dear [-first_name-] [-last_name-]"; 

$tokens = array("[-first_name-]", "[-last_name-]"); 
$replacements = array("John", "Doe"); 
$emailBody = str_replace($tokens, $replacements, $emailBody); 
+0

루프를 실행하지 않는다. str_replace는 일치 및 대체 배열이 정렬되어있는 한 배열에서 작동합니다. http://us3.php.net/manual/en/function.str-replace.php#example-4697 – thinice

+0

@thinice 개선에 감사드립니다. –

0

이것이 내가 일반적으로 편지 병합을 처리하는 방법입니다. 정규식을 사용하여 [--]으로 묶인 모든 문자열을 찾은 다음 찾은 일치 항목을 대체합니다.

str_replace() 또는 strtr() 솔루션과의 차이

은 당신이 [-xxx-], 예상 아니라 사람을 만족 어떤 패턴을 찾을 수 있다는 것입니다. 당신은 그러나이 조건을 처리 할 수있는 당신이 좋아 : 또한

$user = new stdClass; // this may well be an array 
$user->first_name = 'Jack'; 
$user->last_name = 'Jackson'; 

echo preg_replace_callback('/\[-([a-z_]*)-\]/', function($match) use ($user) { 
    $field = $match[1]; 
    if (isset($user->$field)) { 
     return $user->$field; 
    } 
    // the field was not present, decide what to do 
    return ''; // or: return $match[0]; 
}, $emailBody); 

참조 : preg_replace_callback()


비슷한 대답 내가 준 전에 :

How to include shortcodes into php email template

Fastest way to replace string patterns by mask

-1

I 추측하면 매번 같은 자리 표시자를 가진 표준 템플리트를 만들려면 교체하려는 각 자리 표시 자에 대해 간단한 str_replace를 사용할 수 있습니다.

또는 필드 목록을 가져 와서 반복 할 수 있습니다.

뭔가 같은 :

$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

$result = $mysqli->query("SELECT first_name, last_name FROM table WHERE id=$id"); 

$fieldList = $result->fetch_fields($result); 
$row = $mysqli->fetch_assoc(); 

foreach($fieldList as $field) { 
    $fieldName = $field->name 
    $email_body = str_replace("[-$fieldName-]", $row[$fieldName], $email_body); 
} 
1

당신은 내가 항상 추출에서 장소 홀더를 대체하지 않습니다 str_replace function

$emailBody = 'Dear [-first_name-] [-last_name-]'; 

$search = array('[-first_name-]', '[-last_name-]'); 
$replace = array('John', 'Smith'); 

$emailBody = str_replace($search, $replace, $emailBody); 

는 "친애하는 존 스미스"