2015-07-19 38 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);