在php中使用对象元素过滤数组时,如何指定回调函数?

在php中使用对象元素过滤数组时,如何指定回调函数?,php,arrays,filter,Php,Arrays,Filter,我有一个数组,它的项属于某种对象类型,让它成为my\u object 定义my_对象的类有一个我想用来过滤数组的函数。调用array\u filter时如何指定该函数 class my_class{ private $exclude; public filter_function(){ return !$this->exclude; } } $array=array($my_object1, $my_object2, ....);

我有一个数组,它的项属于某种对象类型,让它成为
my\u object

定义
my_对象的类有一个我想用来过滤数组的函数。调用
array\u filter
时如何指定该函数

 class my_class{
     private $exclude;
     public filter_function(){
        return !$this->exclude;
     }
  }

 $array=array($my_object1, $my_object2, ....);

 $filtered=array_filter($array,'filter_function');//obviously does not work
my_object1
my_object2
。。。都是
my_class
的实例,我希望

$my_object1->filter_function()

$my_object2->filter_function()

,.....

被调用以筛选数组。

您需要使用数组语法指示回调中的对象和方法,如中所示

在本例中,您需要首先创建一个实例,然后将该实例化对象用作回调中的第一个元素,并将方法名用作第二个元素

编辑

但是,如果您试图根据单个对象是否具有排除集来筛选此my_类对象集合,则需要为该集合提供一个筛选方法:

class my_class{
     private $exclude;
     public filter_function(){
        return !$this->exclude;
     }
     public static filter_collection($value){
        return $value->filter_function();
     }
  }

$array = array($my_object1, $my_object2, ....);

$filtered = array_filter($array,['my_class', 'filter_collection']);

您需要使用数组语法指示回调中的对象和方法,如

在本例中,您需要首先创建一个实例,然后将该实例化对象用作回调中的第一个元素,并将方法名用作第二个元素

编辑

但是,如果您试图根据单个对象是否具有排除集来筛选此my_类对象集合,则需要为该集合提供一个筛选方法:

class my_class{
     private $exclude;
     public filter_function(){
        return !$this->exclude;
     }
     public static filter_collection($value){
        return $value->filter_function();
     }
  }

$array = array($my_object1, $my_object2, ....);

$filtered = array_filter($array,['my_class', 'filter_collection']);

您需要使用数组语法指示回调中的对象和方法,如

在本例中,您需要首先创建一个实例,然后将该实例化对象用作回调中的第一个元素,并将方法名用作第二个元素

编辑

但是,如果您试图根据单个对象是否具有排除集来筛选此my_类对象集合,则需要为该集合提供一个筛选方法:

class my_class{
     private $exclude;
     public filter_function(){
        return !$this->exclude;
     }
     public static filter_collection($value){
        return $value->filter_function();
     }
  }

$array = array($my_object1, $my_object2, ....);

$filtered = array_filter($array,['my_class', 'filter_collection']);

您需要使用数组语法指示回调中的对象和方法,如

在本例中,您需要首先创建一个实例,然后将该实例化对象用作回调中的第一个元素,并将方法名用作第二个元素

编辑

但是,如果您试图根据单个对象是否具有排除集来筛选此my_类对象集合,则需要为该集合提供一个筛选方法:

class my_class{
     private $exclude;
     public filter_function(){
        return !$this->exclude;
     }
     public static filter_collection($value){
        return $value->filter_function();
     }
  }

$array = array($my_object1, $my_object2, ....);

$filtered = array_filter($array,['my_class', 'filter_collection']);

如果要根据每个对象的
filter\u函数
方法调用的返回值筛选数组,只需执行以下操作:

array_filter($array, function($obj) { return $obj->filter_function(); });

不需要像Mark的回答那样用静态方法将原始类弄乱。

如果您想根据每个对象的
filter\u函数的返回值过滤数组,您可以简单地:

array_filter($array, function($obj) { return $obj->filter_function(); });

不需要像Mark的回答那样用静态方法将原始类弄乱。

如果您想根据每个对象的
filter\u函数的返回值过滤数组,您可以简单地:

array_filter($array, function($obj) { return $obj->filter_function(); });

不需要像Mark的回答那样用静态方法将原始类弄乱。

如果您想根据每个对象的
filter\u函数的返回值过滤数组,您可以简单地:

array_filter($array, function($obj) { return $obj->filter_function(); });

不需要像Mark的回答那样用静态方法来混乱原始类。

谢谢Mark,然后
$filtered=array\u filter($array,[$array[0],'filter\u function'])是否应该工作?否,因为所做的只是返回单个元素(实例)的标志,然后将该规则应用于集合中的所有元素;它不是完整集合的回调函数。。。。查看我的编辑谢谢标记,然后
$filtered=array\u filter($array,[$array[0],'filter\u function'])是否应该工作?否,因为所做的只是返回单个元素(实例)的标志,然后将该规则应用于集合中的所有元素;它不是完整集合的回调函数。。。。查看我的编辑谢谢标记,然后
$filtered=array\u filter($array,[$array[0],'filter\u function'])是否应该工作?否,因为所做的只是返回单个元素(实例)的标志,然后将该规则应用于集合中的所有元素;它不是完整集合的回调函数。。。。查看我的编辑谢谢标记,然后
$filtered=array\u filter($array,[$array[0],'filter\u function'])是否应该工作?否,因为所做的只是返回单个元素(实例)的标志,然后将该规则应用于集合中的所有元素;它不是完整集合的回调函数。。。。请参阅我的编辑谢谢,但我得到了一个PHP解析错误:语法错误,该行中有意外的T_函数。也许我使用的版本不支持这种调用?我使用的是PHP5.2在5.3中提供的非语法函数。在早期版本中,您需要在调用之外定义整个内部函数,并在
array\u filter
callback中使用其名称。这与Mark的建议没有太大区别(函数定义的地方除外)。谢谢,但我得到了一个PHP解析错误:语法错误,这行中出现了意外的t_函数。也许我使用的版本不支持这种调用?我使用的是PHP5.2在5.3中提供的非语法函数。在早期版本中,您需要在调用之外定义整个内部函数,并在
array\u filter
callback中使用其名称。这与Mark的建议没有太大区别(函数定义的地方除外)。谢谢,但我得到了一个PHP解析错误:语法错误,这行中出现了意外的t_函数。也许我使用的版本不支持这种调用?我使用的是PHP5.2在5.3中提供的非语法函数。在早期版本中,您需要