2015-07-30 14 views
6

È possibile impostare i valori delle proprietà di un oggetto utilizzando un ciclo foreach?PHP: imposta le proprietà dell'oggetto all'interno di un ciclo foreach

voglio dire qualcosa di equivalente a:

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

EDIT: mio codice di esempio non ha fatto nulla, come @YonatanNir e @ gandra404 ha sottolineato, quindi l'ho cambiato un po 'in modo che rifletta quello che volevo dire

+2

ma non ha fatto nulla lì .. hai preso le stesse chiavi e valori e lo abbiamo appena assegnato allo stesso posto che c'era prima ... –

+0

Quando si usa 'foreach', deve essere un' array' per scorrere. Piuttosto genera l'array convertendolo in oggetto. –

+0

vuoi dire fare $ this -> $ key = $ value' forse? dove '$ key' è il nome della proprietà che vuoi controllare? – Random

risposta

4

È possibile loop su una matrice contenente proprietà nomi ei valori da impostare.

Per esempio, un oggetto che ha proprietà "$ var1", "$ var2", e "$ var3", è possibile impostare loro in questo modo:

$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

È possibile implementare Iterator interfaccia e scorrere l'array di oggetti:

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

Questo esempio potrebbe aiutare?

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

Questo stamperà:

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

Inoltre, si può fare

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