Dizinin nesne değerine göre filtre

1 Cevap php

i dizinin nesne değerini filtrelemek için nasıl bilmek istiyorum ...

ben sadece altında gösterilecek benim nesne dizinin bir veri

  Object ( [_fields:private] => Array ( [a] => c7b920f57e553df2bb68272f61570210 [index_date] => 2010/05/11 12:00:58 [b] => i am zahir [c] => google.com [d] => 23c4a1f90fb577a006bdef4c718f5cc2 ) ) 

  Object ( [_fields:private] => Array ( [a] => c7b920f57e553df2bb68272f61570210 [index_date] => 2010/05/11 12:00:58 [b] => i am zahir [c] => yahoo.com [d] => 23c4a1f90fb577a006bdef4c718f5cc2 ) ) 

  Object ( [_fields:private] => Array ( [a] => c7b920f57e553df2bb68272f61570210 [index_date] => 2010/05/11 12:00:58 [b] => i am beni [c] => google.com [d] => 23c4a1f90fb577a006bdef4c718f5cc2 ) ) 

  .
  .
  .

  Object ( [_fields:private] => Array ( [a] => c7b920f57e553df2bb68272f61570210 [index_date] => 2010/05/11 12:00:58 [b] => i am sani [c] => yahoo.com [d] => 23c4a1f90fb577a006bdef4c718f5cc2 ) ) 

i [c] değeri filtre var ...

1 Cevap

Etrafta (belki mülkiyet enjeksiyon hariç) özel alanları erişirken gitmek olduğunu önerin, ama bunu yapabilirsiniz değil:

class A {
    private $variab = array();
    public function __construct($val) {
        $this->variab["c"]  = $val;
    }
}

$objects = array();
$objects[] = new A("value 1");
$objects[] = new A("value 2");
$objects[] = new A("value 3");

var_dump($objects);

$prop = new ReflectionProperty("A", "variab");
$prop->setAccessible(true);
$objects_filtered = array_filter($objects,
    function (A $obj) use ($prop) {
        $propval = $prop->getValue($obj);
        return $propval["c"] != "value 2";
    }
);
var_dump($objects_filtered);
$prop->setAccessible(false);

Bu verir:

array(3) {
  [0]=>
  object(A)#1 (1) {
    ["variab":"A":private]=>
    array(1) {
      ["c"]=>
      string(7) "value 1"
    }
  }
  [1]=>
  object(A)#2 (1) {
    ["variab":"A":private]=>
    array(1) {
      ["c"]=>
      string(7) "value 2"
    }
  }
  [2]=>
  object(A)#3 (1) {
    ["variab":"A":private]=>
    array(1) {
      ["c"]=>
      string(7) "value 3"
    }
  }
}
array(2) {
  [0]=>
  object(A)#1 (1) {
    ["variab":"A":private]=>
    array(1) {
      ["c"]=>
      string(7) "value 1"
    }
  }
  [2]=>
  object(A)#3 (1) {
    ["variab":"A":private]=>
    array(1) {
      ["c"]=>
      string(7) "value 3"
    }
  }
}

DÜZENLEME: PHP 5.3.x kullanarak değil beri, yerine bu deneyin:

function filterFunc (A $obj) {
    global $prop;
    $propval = $prop->getValue($obj);
    return $propval["c"] != "value 2";
}
$objects_filtered = array_filter($objects, "filterFunc");