Dizi ve nesne arasındaki PHP kesişme

2 Cevap php

Ben bir nesne var, hadi böyle diyelim:

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);

Ben bir dizi olarak bu nesnenin özelliklerinin keyfi bir dilim almak istiyorum.

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

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

print_r($output);

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

2 Cevap

Bu özellikler, kamu varsayarak çalışması gerekir:

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

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

Note: var Bu anlamda muhtemelen önerilmiyor. Bu PHP4 bulunuyor. PHP5 yoludur:

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

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

...I thought of how to do this half way through writing the question...

function magicHere ($obj, $keys) {
    return array_intersect_key(get_object_vars($obj), array_flip($keys));
}