Foreach 循环 returns 仅多维数组的第一个索引 PHP
Foreach loop returns only first index on multidimensional array PHP
让我解释一下我的情况,
我正在为我的公司制作一个邮件模板。
此邮件模板必须完全在 HTML 中。
邮寄模板包含我们商店的不同产品。
该模板包含包含产品信息的框。
让我向您展示我的模板:
邮寄-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
来替换信息。
我想要的:所以我想要的是每个数组显示一个产品信息框。
问题:它的作用是仅显示第一个数组中的三个产品框。
问题:有谁知道如何显示来自所有不同三个数组的三个框?
这个问题相当大,答案可能很简单,
但是,我现在已经被困了很长一段时间所以我希望这里有人可以帮助我。
感谢您花时间,感谢我能得到的所有帮助!
我对这一切真的很陌生,包括 Whosebug,所以请尽可能纠正我。 :)
注意:当我 echo
$product['product_name']
在 $content
之外时,它会显示三个不同的名称。每当我编辑 $content
时它都不起作用。
我只是不明白为什么。
您正在用第一个循环破坏您的模板
将 $content = $template;
移动到您的 foreach 循环中,以便它每次都能获得 "fresh" 模板源。
foreach ($products as $product){
$content = $template;
第一次循环后没有剩余的占位符。
每次迭代都需要一个新模板。
我也不认为需要 case_insensitive 替换。
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>
让我解释一下我的情况, 我正在为我的公司制作一个邮件模板。 此邮件模板必须完全在 HTML 中。 邮寄模板包含我们商店的不同产品。 该模板包含包含产品信息的框。 让我向您展示我的模板:
邮寄-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
来替换信息。
我想要的:所以我想要的是每个数组显示一个产品信息框。
问题:它的作用是仅显示第一个数组中的三个产品框。
问题:有谁知道如何显示来自所有不同三个数组的三个框?
这个问题相当大,答案可能很简单, 但是,我现在已经被困了很长一段时间所以我希望这里有人可以帮助我。 感谢您花时间,感谢我能得到的所有帮助!
我对这一切真的很陌生,包括 Whosebug,所以请尽可能纠正我。 :)
注意:当我 echo
$product['product_name']
在 $content
之外时,它会显示三个不同的名称。每当我编辑 $content
时它都不起作用。
我只是不明白为什么。
您正在用第一个循环破坏您的模板
将 $content = $template;
移动到您的 foreach 循环中,以便它每次都能获得 "fresh" 模板源。
foreach ($products as $product){
$content = $template;
第一次循环后没有剩余的占位符。
每次迭代都需要一个新模板。
我也不认为需要 case_insensitive 替换。
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>