是否可以使用foreach循环设置对象的属性值?
我的意思相当于:
foreach($array as $key=>$value) {
$array[$key] = get_new_value();
}
编辑:我的示例代码没有做任何事情,因为@YonatanNir和@ gandra404指出,所以我稍微改了一下,所以它反映了我的意思
答案 0 :(得分:4)
您可以循环包含要设置的属性名称和值的数组。
例如,具有属性“$ var1”,“$ var2”和“$ var3”的对象,您可以这样设置它们:
$propertiesToSet = array("var1" => "test value 1",
"var2" => "test value 2",
"var3" => "test value 3");
$myObject = new MyClass();
foreach($propertiesToSet as $property => $value) {
// same as $myObject->var1 = "test value 1";
$myObject->$property = value;
}
答案 1 :(得分:2)
这个例子会有所帮助吗?
$object = new stdClass;
$object->prop1 = 1;
$object->prop2 = 2;
foreach ($object as $prop=>$value) {
$object->$prop = $object->$prop +1;
}
print_r($object);
这应输出:
stdClass Object
(
[prop1] => 2
[prop2] => 3
)
另外,你可以做到
$object = new stdClass;
$object->prop1 = 1;
$object->prop2 = 2;
foreach ($object as $prop=>&$value) {
$value = $value + 1;
}
print_r($object);
答案 2 :(得分:0)
您可以实现Iterator接口并遍历对象数组:
foreach ($objects as $object) {
$object->your_property = get_new_value();
}
答案 3 :(得分:0)
黑掉了几个小时,这就是我最终使用的。注意在两个地方通过引用传递的参数。一个是在你进入方法时,另一个是在 foreach 循环中。
private function encryptIdsFromData(&$data){
if($data == null)
return;
foreach($data as &$item){
if(isset($item["id"]))
$item["id"] = $this->encrypt($item["id"]);
if(is_array($item))
$this->encryptIdsFromData($item);
}
}