Передать значения из массива в объект? - PHP - PullRequest
3 голосов
/ 23 июля 2010

Моя проблема упрощена:


class A {
  public $a;
  public $b;

  function f1 () {
     // Code
  }
}

$obj = new A();

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

Как я могу поместить содержимое $ arr в $ obj? (Очевидно, что без $ obj-> a = $ arr ["a"] предположим, что существуют тысячи значений)

Спасибо.

Ответы [ 3 ]

6 голосов
/ 23 июля 2010

Цикл foreach и переменная переменная:

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

Хотя, вероятно, в вашем классе не должно быть тысяч переменных.

2 голосов
/ 23 июля 2010

Вы также можете использовать функцию get_class_vars() как -

<?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);
?>
1 голос
/ 23 июля 2010

То же, что (исключение защищенного и частного участника):

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];
}

Или просто добавьте метод итерации в класс 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
    }
} 

и используйте метод iterate ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...