2015-07-19 37 views
1

我有两个嵌套的stdClass(多个值)。如何使用PHP中的另一个stdClass嵌套属性更新stdClass的值

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

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

我想改变第二个属性的第一个对象的属性。两者都是stdClasses,用is_object进行测试。 但是我不能将值复制到第一个对象。

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

其中所有的类型都是stdClass。

回答

3

你的问题只是$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 
     ) 

) 

在这种情况下,一个好主意始终是阅读你的代码引发的错误消息:“试图获取属性非对象“。这清楚地指出了问题所在。也有一些基本的错误处理从来是一个坏主意...

0

其实你可以:) 你有语法错误"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);