2010-07-23 4 views
3

Mon problème, simplifié est:Transmettre des valeurs d'un tableau à un objet? - PHP


class A { 
    public $a; 
    public $b; 

    function f1() { 
    // Code 
    } 
} 

$obj = new A(); 

$arr = array ("a" => 1, "b" => 2); 

Comment puis-je mettre le contenu de $ en arr $ obj? (Evidemment sans $ obj-> a = $ arr ["a"], supposons qu'il y ait des milliers de valeurs)

Merci.

Répondre

6

Une boucle foreach et une variable variable:

foreach ($arr as $name => $value) { 
    $obj->$name = $value; 
} 

Vous ne devriez probablement pas avoir des milliers de variables dans votre classe bien.

+0

Merci beaucoup. :) – johnjohn

2

Vous pouvez également utiliser la fonction get_class_vars() comme -

<?php 
class A { 
    public $a; 
    public $b; 

    function f1() { 
    // Code 
    } 
}  

$obj = new A(); 

$arr = array ("a" => 1, "b" => 2); 

$vars = get_class_vars("A"); 

foreach($vars as $var=>$value) 
    $obj->$var = $arr[$var]; 

print_r($obj); 
?> 
+0

Merci d'avoir répondu! – johnjohn

1

Un même que (défausser une carte membre privé protégé &):

foreach ($obj as $property_name => $property_value) { 
    if (array_key_exists($property_name, $arr)) 
     //discarding protected and private member 
     $obj->$property_name = $arr[$property_name]; 
} 

Ou tout simplement ajouter la méthode itérer sur la classe A:

class A { 
    public $a; 
    public $b; 

    function iterate($array) { 
     foreach ($this as $property_name => $property_value) { 
      if (array_key_exists($property_name, $array)) 
       $this->$propety_name = $array[$property_name]; 
     } 
    } 
    function f1() { 
     // Code 
    } 
} 

et d'utiliser la méthode iterate().

+0

Le dernier code affectera le membre privé et protégé contrairement au code précédent. Alors choisissez en fonction de vos besoins. – iroel

+0

Un grand merci pour votre réponse! – johnjohn

Questions connexes