Foreach循环仅返回多维数组PHP上的第一个索引

Izz*_*zzy 5 html php arrays foreach file-put-contents

让我解释一下我的情况,我正在为我的公司制作邮件模板。该邮件模板必须完全使用HTML。邮件模板包含我们商店中的其他产品。该模板具有带有有关产品信息的框。让我向您展示我的模板:

mailing-template.html

         <div>
                    ##PRODUCT_NAME##                     <br />    
                    Onderdeel Nr: ##PRODUCT_ID##         <br />  
                    Merk: ##PRODUCT_BRAND##              <br />  
                    Prijs: €##PRODUCT_PRICE##            <br />
         </div>
Run Code Online (Sandbox Code Playgroud)

您可能会说,## 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',
    )
);
Run Code Online (Sandbox Code Playgroud)

现在,让我向您展示如何替换信息:

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;
}
Run Code Online (Sandbox Code Playgroud)

我正在str_ireplace用来替换信息。

我想要的东西:所以我想要的是每个阵列显示一个产品信息框。

问题:它只显示第一个阵列中的三个产品框。

问题:有谁知道我如何显示来自所有三个阵列的三个框?

这个问题对于答案可能是多么简单很重要,但是,我已经被困了很长时间了,所以我希望这里有人可以帮助我。感谢您抽出宝贵的时间,感谢我能获得的所有帮助!

对于这一切,我真的很陌生,包括stackoverflow,因此请尽可能纠正我。:)

注意:当我echo $product['product_name']在外面时,$content它会显示三个不同的名称。每当我编辑时它都不起作用$content。我只是似乎不明白为什么。

mic*_*usa 2

第一个循环后没有剩余的占位符。

\n\n

每次迭代都需要一个新的模板。

\n\n

我也不认为需要区分大小写的替换。

\n\n

前两个参数str_replace()将接受数组,因此您可以将函数调用总数减少到一个。

\n\n

测试代码:(演示

\n\n
foreach ($products as $product) {\n    echo str_replace(\n             [\'##PRODUCT_ID##\', \n              \'##PRODUCT_NAME##\',\n              \'##PRODUCT_PRICE##\',\n              \'##PRODUCT_BRAND##\'],\n             [$product[\'product_id\'],\n              $product[\'product_name\'],\n              round($product[\'price_excl\']/100, 2),\n              $product[\'product_brand\']],\n             $content\n         );\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
<div>\n     Ontsteking (DI) Cassette Zwart Origineel Saab 9-3/9-5                     <br />    \n     Onderdeel Nr: RD55559955         <br />  \n     Merk: Origineel Saab              <br />  \n     Prijs: \xe2\x82\xac226            <br />\n</div><div>\n     een ander product                     <br />    \n     Onderdeel Nr: RD55559955         <br />  \n     Merk: Origineel Saab              <br />  \n     Prijs: \xe2\x82\xac226            <br />\n</div><div>\n     nog een ander product                     <br />    \n     Onderdeel Nr: RD55559955         <br />  \n     Merk: Origineel Saab              <br />  \n     Prijs: \xe2\x82\xac226            <br />\n</div>\n
Run Code Online (Sandbox Code Playgroud)\n