2015-07-30 13 views
6

Có thể đặt giá trị thuộc tính của đối tượng bằng cách sử dụng vòng lặp foreach không?PHP: Đặt thuộc tính đối tượng bên trong vòng lặp foreach

Ý tôi là một cái gì đó tương đương với:

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

EDIT: mã ví dụ của tôi đã không làm gì, như @YonatanNir và @ gandra404 chỉ ra, vì vậy tôi đã thay đổi nó một chút để nó phản ánh những gì tôi có nghĩa là

+2

nhưng bạn đã làm gì ở đó .. bạn mất cùng các khóa và giá trị và chỉ được gán cho cùng một vị trí trước đó ... –

+0

Khi bạn sử dụng 'foreach', nó phải là một' mảng' để lặp qua. Thay vào đó tạo ra mảng chuyển đổi nó thành đối tượng. –

+0

bạn muốn thực hiện '$ this -> $ key = $ value'? nơi '$ key' là tên của thuộc tính bạn muốn kiểm tra? – Random

Trả lời

4

Bạn có thể lặp trên một mảng chứa các thuộc tính tên và giá trị để thiết lập.

Ví dụ, một đối tượng trong đó có tính chất "$ var1", "$ var2", và "$ var3", bạn có thể đặt chúng theo cách này:

$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; 
} 
0

Bạn có thể thực hiện Iterator giao diện và lặp qua mảng các đối tượng:

foreach ($objects as $object) { 
    $object->your_property = get_new_value(); 
} 
2

Ví dụ này có giúp ích gì không?

$object = new stdClass; 
$object->prop1 = 1; 
$object->prop2 = 2; 
foreach ($object as $prop=>$value) { 
    $object->$prop = $object->$prop +1; 
} 
print_r($object); 

này nên đầu ra:

stdClass Object 
(
    [prop1] => 2 
    [prop2] => 3 
) 

Ngoài ra, bạn có thể làm

$object = new stdClass; 
$object->prop1 = 1; 
$object->prop2 = 2; 
foreach ($object as $prop=>&$value) { 
    $value = $value + 1; 
} 
print_r($object); 
Các vấn đề liên quan