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

Poo*_*att 5 php arrays

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

例如

$a = array(1,2,3,4,5);
foreach($a as $val){

    if ($val == 3){
      break;
    }

}
Run Code Online (Sandbox Code Playgroud)

如果我们写回电话,它将如下

$result = array_filter($a, function(){
      if ($val == 3){
          return true;
        }
});
Run Code Online (Sandbox Code Playgroud)

在回调中,它将遍历所有数组元素,尽管条件在3处得到满足。其余两个元素4、5也将通过回调

我想在回调中使用这样的函数,它将中断回调一个所需的条件匹配并停止执行其余元素

有可能吗?

hak*_*kre 5

您可以使用静态变量来实现。静态变量在回调函数内部具有局部作用域,但在两次调用之间保留其值。

就其值而言,它的行为类似于全局变量,但具有局部作用域:

$callback = function($val)
{
    static $filter = false;

    if ($val == 3) {
        $filter = true;
    }

    return $filter;        
};
Run Code Online (Sandbox Code Playgroud)

此回调将false一直返回到$val == 3。然后它将返回true

  • 不,不是执行。但它会保留您想要的元素。没有办法告诉 array_filter 停止,它总是会处理数组的所有值。如果你想要这样,你需要创建一个循环并自己退出它。 (2认同)

Eug*_*ene 5

我不认为你可以用 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);
Run Code Online (Sandbox Code Playgroud)