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);