一旦满足数组的一个元素的条件,我们可以中断回调的执行吗?
前任。
$a = array(1,2,3,4,5);
foreach($a as $val){
if ($val == 3){
break;
}
}
如果我们为它写回调,它将如下所示
$result = array_filter($a, function(){
if ($val == 3){
return true;
}
});
在回调中,它将遍历所有数组元素,尽管条件在 3 处得到满足。 其余两个元素 4、5 也将经历回调
我想要回调中的此类函数,它将破坏回调一个所需的条件匹配并停止执行其余元素
可能吗?
您可以使用静态变量来执行此操作。静态变量在回调函数中属于本地范围,但在调用之间保留其值。
就其值而言,它的行为类似于全局变量,但具有局部范围:
$callback = function($val)
{
static $filter = false;
if ($val == 3) {
$filter = true;
}
return $filter;
};
此回调将返回false
直到$val == 3
。然后它将返回true
。
我不认为你可以用array_filter做到这一点,但你可以做这样的事情:
$a = array(1,2,3,4,5);
try {
array_walk($a, function($value, $key) use(&$a) {
if ($value == 3){
throw new Exception("condition match");
}
unset($a[$key]);
});
}
catch(Exception $e) { }
var_dump($a);