我希望能够查找和更改给定对象中可能存在或不存在的特定属性。这些属性是不一致结构化数组的一部分,因此我想提前定义要查找的属性。
$properties = array(
"color",
"name['first']",
"jobs->primary['company']",
"location['home']['city']",
etc...
);
foreach ($properties as $property) {
if (isset($some_object->$property)) {
...
}
}
问题当然是'$ some_object-> $ property',它始终为null。
我假设$ property被视为字符串而不是变量名。一世 只是不记得是否有方法表明它是变量名称的一部分 而不是一个简单的字符串。
谢谢!
答案 0 :(得分:1)
如果您的对象看起来像这样,您的代码将起作用:
$some_object = new stdClass;
$some_object->{"color"} = "brown";
$some_object->{"name['first']"} = "Bob";
$some_object->{"jobs->primary['company']"} = "Google";
$some_object->{"location['home']['city']"} = "Redmond";
如果你的对象是这样的:
$some_object = new stdClass;
$some_object->color = "brown";
$some_object->name = ["first" => "Bob"];
$some_object->jobs = new stdClass;
$some_object->jobs->primary = ["company" => "Google"];
$some_object->location = ["home" => ["city" => "Redmond"]];
然后你的代码将无效。
$properties
数组中的值是字符串,而不是对象属性/数组。为了使用$properties
值,您需要编写相当多的代码来解析值(“理解”值),然后您需要使用解析的数据递归遍历对象。
递归地移动对象并不是那个很难,但你最好还是找一些其他的方法。
答案 1 :(得分:0)
为此,您可以使用函数property_exists
所以它会是:
foreach ($properties as $property) {
if (property_exists($object ,$property )) {
...
}
}