一旦条件满足数组的一个元素,我们可以中断回调的执行吗?
例如
$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也将通过回调
我想在回调中使用这样的函数,它将中断回调一个所需的条件匹配并停止执行其余元素
有可能吗?
您可以使用静态变量来实现。静态变量在回调函数内部具有局部作用域,但在两次调用之间保留其值。
就其值而言,它的行为类似于全局变量,但具有局部作用域:
$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 来实现这一点,但你可以这样做:
$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)
| 归档时间: |
|
| 查看次数: |
2810 次 |
| 最近记录: |