让我们假设我有以下代码:
function someFunc(){
// some other logic goes here
$return = [];
array_walk_recursive($matches, function($value, $key) use (&$return){
$return[] = $value;
});
return $return;
}
通常,这一切都很好,花花公子。基本上发生的事情是$matches
被压扁然后返回。
但是我想对匹配中的每个$key => $value
对应用一些其他逻辑,但我想要应用的逻辑在当前范围内没有位置。
当然上面的代码工作正常,我可以在调用函数后使用foreach
来应用逻辑,例如:
function someOtherFunc(){
foreach(someFunc() as $key => $value){
// do stuff
}
}
但是为了论证,我们假设我不是在someFunc
内返回,而是yield
,所以someFunc
将被写为:
function someFunc(){
// some other logic goes here
array_walk_recursive($matches, function($value, $key){
yield $value;
});
}
这当然不起作用,因为现在匿名函数变成了一个生成器,而array_walk_recursive
又使用了它(这实际上是一个谜,为什么它不会抛出错误,我期望array_walk_recursive
抱怨,这导致很好,没有任何东西被调用到调用函数,因为yield
被匿名函数的范围所满足。
基本上我问的是,是否可以yield
$value
PERSON_ID EVENT
3 10000000002 BC1
4 10000000002 R_B
5 10000000002 BC2
6 10000000002 DEATH
7 10000000002 EPI
20 10000000007 BC1
21 10000000007 BC2
22 10000000007 DEATH
23 10000000010 DEATH
37 10000000827 DEATH
38 10000000830 BC1
39 10000000830 DEATH
来调用者而不会打破当前的流量或一些奇怪的黑客代码?