如何从回调函数返回控制权或在中间array_filter处理中断数组的处理


How to return control from callback function or break the processing of array in middle array_filter processing

一旦满足数组的一个元素的条件,我们可以中断回调的执行吗?

前任。

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