PHP пересечение между массивом и объектом - PullRequest
0 голосов
/ 08 апреля 2010

У меня есть объект, скажем, это так:

class Foo {
    var $b, $a, $r;

    function __construct($B, $A, $R) {
        $this->b = $B;
        $this->a = $A;
        $this->r = $R;
    }
}

$f = new Foo(1, 2, 3);

Я хочу получить произвольный фрагмент свойств этого объекта в виде массива.

$desiredProperties = array('b', 'r');

$output = magicHere($foo, $desiredProperties);

print_r($output);

// array(
//   "b" => 1,
//   "r" => 3
// )

Ответы [ 2 ]

2 голосов
/ 08 апреля 2010

... Я думал о том, как сделать это на полпути, написав вопрос ...

function magicHere ($obj, $keys) {
    return array_intersect_key(get_object_vars($obj), array_flip($keys));
}
2 голосов
/ 08 апреля 2010

Это должно работать, если свойства общедоступны:

$desiredProperties = array('b', 'r');
$output = props($foo, $desiredProperties);

function props($obj, $props) {
  $ret = array();
  foreach ($props as $prop) {
    $ret[$prop] = $obj->$prop;
  }
  return $ret;
}

Примечание: var в этом смысле, возможно, не рекомендуется. Это PHP4. PHP5 путь:

class Foo {
  public $b, $a, $r;

  function __construct($B, $A, $R) {
    $this->b = $B;
    $this->a = $A;
    $this->r = $R;
  }
}
...