PHP:在foreach循环中设置对象属性

时间:2015-07-30 12:03:08

标签: php

是否可以使用foreach循环设置对象的属性值?

我的意思相当于:

foreach($array as $key=>$value) {
    $array[$key] = get_new_value();
}

编辑:我的示例代码没有做任何事情,因为@YonatanNir和@ gandra404指出,所以我稍微改了一下,所以它反映了我的意思

4 个答案:

答案 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);
            
    }
}