2010-05-15 144 views
0

我想知道如何在数组对象筛选值的对象值...过滤器在阵列

我只是显示下面是我的对象数组的一个数据

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

我有过滤[C]价值... ...

+0

'C'是对象的私有字段。您只能通过对象方法访问它。 – 2010-05-15 12:44:17

+0

是的,我们可以通过对象方法来访问这个值。 – 2010-05-15 12:48:47

回答

0

这并不是说我电子书籍,你到处去访问私有字段(可能除了属性注入),但你可以这样做:

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

这给:

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" 
    } 
    } 
} 

编辑:既然你不使用PHP 5.3.x,则应尝试这个:

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

我收到以下错误,,, 看到这个 语法错误,在/var/www/nginx-default/ex.php意外T_FUNCTION上线24 线24 功能(A $ OBJ )使用($ prop){ – 2010-05-15 13:24:51

+0

您好请解释为什么发生错误... – 2010-05-15 13:37:18

+0

您使用PHP <5.3。 – Artefacto 2010-05-15 13:39:35