【问题标题】:filter by value in object of array按数组对象中的值过滤
【发布时间】:2010-05-15 12:41:33
【问题描述】:

我想知道如何过滤数组对象中的值...

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

  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] 值...

【问题讨论】:

  • c 是对象的私有字段。您只能通过对象方法访问它。
  • 是的,我们可以通过对象方法访问该值。

标签: php oop


【解决方案1】:

我不建议您四处访问私有字段(可能用于属性注入除外),但您可以这样做:

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

【讨论】:

  • 我收到以下错误,,,看到此语法错误,第 24 行 /var/www/nginx-default/ex.php 中的意外 T_FUNCTION 第 24 行是函数(A $obj)使用 ($prop) {
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多