2017-02-26 26 views
1

私のHTML電子メールテンプレートで%filename%を置き換えようとしています。私がしようとしているのは、アップロードされたファイルの通知のように電子メールを送信することです。同じ文書にすべてがある場合でも、HTML電子メールテンプレートで%filename%を置き換えようとしているときに機能します。結果を1つの文字列に変換するPHP

これは完璧に動作します:

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

をしかし、私がアップロードされるすべてのファイルでこれを行うにしようとすると、私が問題に実行します。私はこれを行うことはできませんが、どのように%filename%をアップロードされたすべてのファイルのファイル名に置き換えることができますか?これは私がやろうとしたことです。もちろん運はありません。

ご覧のとおり、私のHTMLテンプレートには、%filename%ではなくliでリストされたすべてのファイル名が必要です。

<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

関連する問題