我以这种方式读了一个json
$app = json_decode($dati);
foreach($app->ambient as $mydata){
foreach($mydata->layer as $mydata2){
foreach($mydata2->layer_obj as $mydata3){
if($mydata3->obj == "ipcam"){
}
}
}
}
当我进入如果我应该能够更改对象的某个变量时,我已经尝试了各种方式,但没有成功
对象$ mydata3就是那样的
{
obj: "ipcam",
indirizzo_locale: {
ip: "0.0.0.0",
port: "80",
url: "/test",
username: "admin",
password: "admin"
},
indirizzo_remoto: {
ip: "0.0.0.0",
port: "80",
url: "/test",
username: "admin",
password: "admin"
}
}
答案 0 :(得分:3)
如果您需要对正在迭代的对象进行更改,则需要使用&
符号通过引用访问成员:
foreach($app->ambient as &$mydata){
foreach($mydata->layer as &$mydata2){
foreach($mydata2->layer_obj as &$mydata3){
if($mydata3->obj == "ipcam"){
$mydata3->indirizzo_locale->ip = 'you changed the ip';
}
}
}
}
var_dump($app);
答案 1 :(得分:1)
试试这个:
$app = json_decode($dati);
foreach($app->ambient as &$mydata){
foreach($mydata->layer as &$mydata2){
foreach($mydata2->layer_obj as &$mydata3){
if($mydata3->obj == "ipcam"){
}
}
}
}
变量通过引用调用,这意味着在编辑像$ mydata3这样的变量时,你也可以改变$ app。
否则你只会更改$ app的一小部分副本,这些副本不属于$ app。
答案 2 :(得分:0)
当使用json_decode(json_encoded_object)时,它返回对象,
如果你想得到数组传递结果第二个参数' true'在json_decode()函数中。
像这样:json_decode(json_encoded_object,true);