让我解释一下我的情况,我正在为我的公司制作一个邮件模板。此邮件模板必须完全使用HTML。邮寄模板包含来自我们商店的不同产品。模板有包含有关产品信息的框。让我给你看我的模板:
mailing-template.html
         <div>
                    ##PRODUCT_NAME##                     <br />    
                    Onderdeel Nr: ##PRODUCT_ID##         <br />  
                    Merk: ##PRODUCT_BRAND##              <br />  
                    Prijs: €##PRODUCT_PRICE##            <br />
         </div>正如您可能知道的,##PRODUCT_INFORMATION#是我的产品信息将出现的地方。在PHP的帮助下,我可以替换它。我从不同的数组中获取产品信息,如下所示:
列阵
$products = array
(
    array
    (
        'product_id' => 'RD55559955',
        'product_name' => 'Ontsteking (DI) Cassette Zwart Origineel Saab 9-3/9-5',
        'price_excl' => 22600,
        'product_brand' => 'Origineel Saab',
    ),
    array
    (
        'product_id' => 'RD55559955',
        'product_name' => 'een ander product',
        'price_excl' => 22600,
        'product_brand' => 'Origineel Saab',
    ),
    array
    (
        'product_id' => 'RD55559955',
        'product_name' => 'nog een ander product',
        'price_excl' => 22600,
        'product_brand' => 'Origineel Saab',
    )
);现在让我展示一下我是如何替换这些信息的:
createTemplate.php
//get content from mailing-template
$template = file_get_contents(dirname(__FILE__).'/mailing-template.html');
$content = $template;
foreach ($products as $product){
//replace placeholders with actual product data
$content = str_ireplace('##PRODUCT_ID##', $product['product_id'], $content);
$content = str_ireplace('##PRODUCT_NAME##', $product['product_name'], $content);
$content = str_ireplace('##PRODUCT_PRICE##', round($product['price_excl']/100, 2), $content);
$content = str_ireplace('##PRODUCT_BRAND##', $product['product_brand'], $content);
//echo the template
echo $content;
}我正在使用str_ireplace来替换信息。
我想要的:,所以我想要的是在每个数组中显示一个产品信息框。
问题:只从第一个数组中显示三个产品框。
问题:有谁知道我如何从所有不同的三个数组中显示三个框?
这个问题很大,因为答案可能很简单,但是,我已经被困了很长一段时间了,所以我希望这里有人能帮助我。谢谢你抽出时间,感谢你给我的帮助!
我对这一切都很陌生,包括堆叠溢出,所以无论如何你都可以纠正我。:)
注意:当我echo $product['product_name']在$content之外时,它确实显示了三个不同的名称。每当我编辑$content时,它就不工作了。我只是不明白为什么。
发布于 2019-10-11 11:18:03
在第一个循环之后没有剩余的占位符。
每次迭代都需要一个新的模板。
我也不认为有必要更换case_insensitive。
str_replace()的前两个参数将接受数组,因此可以将函数调用总数减少到一个。
测试代码:(演示)
foreach ($products as $product) {
    echo str_replace(
             ['##PRODUCT_ID##', 
              '##PRODUCT_NAME##',
              '##PRODUCT_PRICE##',
              '##PRODUCT_BRAND##'],
             [$product['product_id'],
              $product['product_name'],
              round($product['price_excl']/100, 2),
              $product['product_brand']],
             $content
         );
}输出:
<div>
     Ontsteking (DI) Cassette Zwart Origineel Saab 9-3/9-5                     <br />    
     Onderdeel Nr: RD55559955         <br />  
     Merk: Origineel Saab              <br />  
     Prijs: €226            <br />
</div><div>
     een ander product                     <br />    
     Onderdeel Nr: RD55559955         <br />  
     Merk: Origineel Saab              <br />  
     Prijs: €226            <br />
</div><div>
     nog een ander product                     <br />    
     Onderdeel Nr: RD55559955         <br />  
     Merk: Origineel Saab              <br />  
     Prijs: €226            <br />
</div>发布于 2019-10-11 11:17:02
你用第一个循环破坏你的模板
将$content = $template;移动到foreach循环中,以便每次都获得“新鲜”模板源。
foreach ($products as $product){
  $content = $template;https://stackoverflow.com/questions/58339998
复制相似问题