在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中提供的非语法函数。在早期版本中,您需要