2017-02-26 1 views
1

HTML 전자 메일 템플릿에서 % filename %을 (를) 대체하려고합니다. 내가하려는 것은 업로드 된 파일에 대한 알림과 같은 전자 메일을 보내는 것입니다. 동일한 문서에 모든 것을 가지고 있지만 HTML 전자 메일 템플릿에서 % filename %을 (를) 대체하려고 할 때 작동합니다.결과를 한 문자열로 바꾸려면 PHP

이 완벽하게 작동합니다 :

$date = date("d.m.Y"); 
$message = str_replace('%date%', $date, $message); 

을하지만, 내가 업로드 된 모든 파일이 작업을 수행 할 때, 나는 문제로 실행합니다. 나는 이것을 할 수 없다고 확신하지만 % filename %을 업로드 된 모든 파일의 파일 이름으로 어떻게 대체 할 수 있습니까? 이것은 내가하려고했던 것입니다. 물론 운이 없다. 당신이 볼 수 있듯이

$filename = for($i = 0; $i < count($data['data']['metas']); $i++) { 
    echo '<li>' . $data['data']['metas'][$i]['name'] . '</li>'; 
} 

$message = str_replace('%filename%', $filename, $message); 

, 내 HTML 템플릿이 대신 %의 파일 이름 %와 같은 리튬로 나열된 모든 파일 이름을 원하는;

<li>filename1</li> 
<li>filename2</li> 
<li>filename3</li> 

도움 주셔서 감사합니다.

+0

'$ filename = for'에 대한 구문이 잘못되었습니다. for 루프를 변수 값으로 설정할 수 없습니다. – Martin

답변

3
$filename = ''; 

for($i = 0; $i < count($data['data']['metas']); $i++) { 
    $filename .= '<li>' . $data['data']['metas'][$i]['name'] . '</li>'; 
} 

$message = str_replace('%filename%', $filename, $message); 
+0

그랬습니다. 생각하지 않았어. 감사! – zorensen

2

다음은 대체로 답을 제시해줍니다. 배열을 반복하면서 루프에서 결과를 반환하려고합니다. 구문이 잘못되었지만 배열의 각 요소에 대해 선택한 함수를 호출 할 수있는 array_map을 볼 수 있습니다.

따라서, 우리는 이제 우리는 array_map으로이 콜백을 사용하여 목록을 만들 수 있습니다리스트 요소

function listify($meta) { 
    return '<li>'.htmlentities($meta['name']).'</li>'; 
} 

로 이름을 파일 메타 데이터의 단일 배열을하고 포맷하는 기능을 할 수 있습니다. array_map가 배열을 반환, 우리는 일반 문자열로 다시 implode해야합니다

$filelist=implode('', array_map('listify', $data['data']['metas'])); 

당신은 하나의 문이 점을 결합 할 수 있습니다, 난 그냥 명확성을 위해 그것을 분리했습니다.

+0

위대한 팁과 위대한 생각. 이것은 매우 유용합니다. 감사! – zorensen

관련 문제