2017-02-26 80 views
1

我試圖在我的HTML電子郵件模板中替換%filename%。我想要做的是發送一封電子郵件,例如通知上傳了哪些文件。如果我在同一個文檔中擁有所有內容,但是當我嘗試在我的HTML電子郵件模板中替換%filename%時,它將起作用。結果爲一個字符串的PHP

這完美的作品:

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

然而,當我嘗試上傳的所有文件要做到這一點,我遇到的問題。我確信我無法做到這一點,但我怎樣才能設法將%filename%替換爲上傳的所有文件的文件名?這是我試圖做的,當然 - 沒有運氣;正如你所看到的,我希望所有的文件名與li一樣列在這裏,而不是%我的HTML模板中的%filename%;

<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,它可以調用你選擇的函數爲數組的每個元素。

因此,我們可以做一個函數,它接受文件元數據的單一陣列和格式化名稱列表元素

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

現在我們可以使用這個回調與array_map建立我們的名單。作爲array_map返回一個數組,我們需要implode它放回一個普通字符串:

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

您可以將它變成一個語句,我剛剛分開它的清晰度。

+0

偉大的提示和偉大的思想。這也是非常有用的。謝謝! – zorensen

相關問題