检查数组元素是否在PHP中传递了回调
PHP中是否有一种内置的方法来确定数组中是否至少有一个元素通过了测试,或者每个元素是否都通过了测试 就像Javascript一样检查数组元素是否在PHP中传递了回调,php,arrays,callback,Php,Arrays,Callback,PHP中是否有一种内置的方法来确定数组中是否至少有一个元素通过了测试,或者每个元素是否都通过了测试 就像Javascript一样 myArray.some('myFunction'); //Will return true if at least one array element passed myFunction myArray.every('myFunction'); //Will return true if every array element passed myFunction
myArray.some('myFunction'); //Will return true if at least one array element passed myFunction
myArray.every('myFunction'); //Will return true if every array element passed myFunction
我通常想知道数组中的元素是否是对象。
我在PHP中所做的工作如下:
//check at least one element passed a test
if(count(array_filter($array, 'is_object')) >0) {
#code
}
//if I want to check if every element in the array is an object
if(count(array_filter($array, 'is_object')) === count($array)) {
#code
}
我为此创建了自定义函数:
function array_every(array $array, callable $callback) {
return (count($array) === count(array_filter($array, $callback)));
}
function array_some(array $array, callable $callback) {
return (count(array_filter($array, $callback)) > 0);
}
但是,我仍然想知道,如果至少有一个元素通过了回调,或者如果每个元素都通过了回调,是否有一种短的、内置的方法返回true或false。您可能对该软件包感兴趣:
<?php
function array_some(callable $callback,$arr){
foreach($arr as $ele){
if(call_user_func($callback,$ele)){
return true;
}
}
return false;
}
function array_every(callable $callback,$arr){
foreach($arr as $ele){
if(!call_user_func($callback,$ele)){
return false;
}
}
return true;
}
function my_callback($ele){
return $ele % 2 == 0;
}
var_dump(array_some('my_callback',[1,2,3,4,5,6,7,8,9,10]));
var_dump(array_some('my_callback',[1,3,5,7]));
var_dump(array_every('my_callback',[1,2,3,4,5,6,7,8,9,10]));
var_dump(array_every('my_callback',[0,2,4,6,8]));
PHP的一组函数原语,深受Scala的可遍历集合、Dojo的数组函数和下划线.js的启发
它有一个some
和一个every
功能
$set=['A','B','B'];
$is_A=函数($item、$collection\u key、$collection){
返回$item=='A';
};
功能性\某些($set$is_A);//真的
功能性\每($set$is_A);//假的
好吧,我们需要定制它。我试试看。我们有数组映射,但对于您的用例而言,它与某些
和每个
有很大不同。建议:将Q移动到Codereview SE,因为这段代码有效^^^对于一些
/来说,最好的方法是每个
都是带中断的普通循环。没有,还没有任何内置的解决方案。好的,@u\u mulder。然后让我们等待PHP的新版本,看看它给我们带来了什么;也许有一天它会为数组提供更好的功能。muuch更好,删除注释:)感谢您的回答和共享库!谢谢你的回答!我喜欢你为我们提供的演示链接。尽管如此,我不会将其标记为可接受的答案,因为我正在寻找一种内置的方式,我希望PHP的未来版本将为我们带来它!顺便说一句,很抱歉回复晚了。