【问题标题】:Foreach loop returns only first index on multidimensional array PHPForeach 循环仅返回多维数组 PHP 上的第一个索引
【发布时间】:2020-02-08 21:46:38
【问题描述】:

让我解释一下我的情况, 我正在为我的公司制作一个邮件模板。 此邮件模板必须完全采用 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 来替换信息。

我想要的:所以我想要的是为每个数组显示一个产品信息框。

问题:它的作用是仅从第一个数组中显示三个产品框。

问题:有谁知道我如何从所有不同的三个数组中显示三个框?

这个问题很大,因为答案可能很简单, 但是,我已经被困了很长一段时间了,所以我希望这里有人可以帮助我。 感谢您抽出宝贵时间,感谢我能得到的所有帮助!

我对这一切都很陌生,包括stackoverflow,所以无论如何你都可以纠正我。 :)

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

【问题讨论】:

    标签: php html arrays foreach file-put-contents


    【解决方案1】:

    您正在使用第一个循环破坏您的模板

    $content = $template; 移动到您的 foreach 循环中,以便每次都能获得“新”模板源。

    foreach ($products as $product){
      $content = $template;
    

    【讨论】:

    • 您是否碰巧从我的回答中删除了您的赞成票?当我上床睡觉时,它有更多的赞成票。如果是这样,你能解释一下为什么吗?它是正确的、经过测试的,并且不仅向 OP 展示了如何解决问题,而且还提高了 sn-p 的整体性能。我只是不明白撤稿。
    • @mickmackusa 一定是误点击,否则没有负面意图。
    【解决方案2】:

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

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

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

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

    测试代码:(Demo)

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-29
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 2011-08-30
      • 1970-01-01
      • 2010-10-24
      相关资源
      最近更新 更多