PHP 在 Foreach 中添加字符串时数组到字符串的转换
PHP Array to String Conversion When Adding Strings in Foreach
我有一个包含货币属性及其各自值的对象。我需要为这些添加额外的金额,我通过附加“+ TAX”值简化了这些。
但是我在 foreach 的第一行不断收到“数组到字符串转换”错误。我不明白为什么 - 这些值是字符串。 “
最糟糕的是,新对象 属性 在自身内部复制。
这是我的代码
<?php
$result = new stdClass();
$result->GBP = "10.00";
$result->USD = "12.00";
foreach ($result as $currency => $value) {
$currencyWithTax = $value .' + TAX';
$result->total[$currency] = $currencyWithTax;
}
print_r($result);
我创建了一个3v4l here来演示。
所以我收到“数组到字符串转换”错误,我的输出如下:
stdClass Object
(
[GBP] => 10.00
[USD] => 12.00
[total] => Array
(
[GBP] => 10.00 + TAX
[USD] => 12.00 + TAX
[total] => Array + TAX
)
)
我无法弄清楚如何解决“数组到字符串”错误,以及最终为什么“总计”属性 在“总计”属性 中重复。我需要我的最终输出看起来像:
stdClass Object
(
[GBP] => 10.00
[USD] => 12.00
[total] => Array
(
[GBP] => 10.00 + TAX
[USD] => 12.00 + TAX
)
)
我错过了什么?谢谢!
您在循环遍历对象时正在修改对象,添加 total
属性。因此循环的后续迭代尝试使用 total
作为货币并在嵌套的 total
数组中创建另一个元素。
在循环中使用一个单独的变量,然后将它添加到对象中。
$totals = [];
foreach ($result as $currency => $value) {
$currencyWithTax = $value .' + TAX';
$totals[$currency] = $currencyWithTax;
}
$result->total = $totals;
您的 foreach 正在将 USD 作为数组添加
试试这个
<?php
$result = new stdClass();
$result->GBP = "10.00";
$result->USD = "12.00";
foreach ($result as $currency => $value) {
if (is_object($value) || is_array($value)) continue;
$currencyWithTax = $value .' + TAX';
$result->total[$currency] = $currencyWithTax;
}
print_r($result);
我有一个包含货币属性及其各自值的对象。我需要为这些添加额外的金额,我通过附加“+ TAX”值简化了这些。
但是我在 foreach 的第一行不断收到“数组到字符串转换”错误。我不明白为什么 - 这些值是字符串。 “
最糟糕的是,新对象 属性 在自身内部复制。
这是我的代码
<?php
$result = new stdClass();
$result->GBP = "10.00";
$result->USD = "12.00";
foreach ($result as $currency => $value) {
$currencyWithTax = $value .' + TAX';
$result->total[$currency] = $currencyWithTax;
}
print_r($result);
我创建了一个3v4l here来演示。
所以我收到“数组到字符串转换”错误,我的输出如下:
stdClass Object
(
[GBP] => 10.00
[USD] => 12.00
[total] => Array
(
[GBP] => 10.00 + TAX
[USD] => 12.00 + TAX
[total] => Array + TAX
)
)
我无法弄清楚如何解决“数组到字符串”错误,以及最终为什么“总计”属性 在“总计”属性 中重复。我需要我的最终输出看起来像:
stdClass Object
(
[GBP] => 10.00
[USD] => 12.00
[total] => Array
(
[GBP] => 10.00 + TAX
[USD] => 12.00 + TAX
)
)
我错过了什么?谢谢!
您在循环遍历对象时正在修改对象,添加 total
属性。因此循环的后续迭代尝试使用 total
作为货币并在嵌套的 total
数组中创建另一个元素。
在循环中使用一个单独的变量,然后将它添加到对象中。
$totals = [];
foreach ($result as $currency => $value) {
$currencyWithTax = $value .' + TAX';
$totals[$currency] = $currencyWithTax;
}
$result->total = $totals;
您的 foreach 正在将 USD 作为数组添加
试试这个
<?php
$result = new stdClass();
$result->GBP = "10.00";
$result->USD = "12.00";
foreach ($result as $currency => $value) {
if (is_object($value) || is_array($value)) continue;
$currencyWithTax = $value .' + TAX';
$result->total[$currency] = $currencyWithTax;
}
print_r($result);