如何在PHP中使用另一个stdClass嵌套属性更新stdClass的值


How to update value of stdClass with another stdClass nested property in PHP

我有两个嵌套的stdClass(多个值)。

$object1 = json_decode ('{"key":"value", "emailing":{"live":false, "test":true}}')
$object2 = json_decode ('{"key":"value", "params:{"emailing":{"live":false, "test":true}, "esp":"email"}}')

我想用第二个对象的属性改变第一个对象的属性。它们都是stdclass,用is_object进行测试。然而,我不能复制值到第一个对象。

$object1->emailing = $object2->params->emailing;

您的问题仅仅是$object2不是对象,因为json_decode()失败了。你在json字符串中有一个不平衡引用字符的问题。下面是可以正常工作的固定版本:

<?php    
$object1 = json_decode ('{"key":"value", "emailing":{"live":false, "test":true}}');
$object2 = json_decode ('{"key":"value", "params":{"emailing":{"live":false, "test":true}, "esp":"email"}}');
$object1->emailing = $object2->params->emailing;
print_r($object1);

输出为:

stdClass Object
(
    [key] => value
    [emailing] => stdClass Object
        (
            [live] =>
            [test] => 1
        )
)
在这种情况下,一个好主意总是读取代码引发的错误消息:"Trying to get property of non-object"。这清楚地指出了问题所在。此外,一些基本的错误处理从来都不是一个坏主意…

其实你可以:)"params:{"emailing":有语法错误-应该是"params":{"emailing":

试试:

$object1 = json_decode('{"key":"value", "emailing":{"live":false, "test":true}}');
$object2 = json_decode('{"key":"value", "params":{"emailing":{"live":"newvalue1", "test":"newvalue2"}, "esp":"email"}}');
// before
print_r($object1);
// after
$object1->emailing = $object2->params->emailing;
print_r($object1);