array_ *函数

时间:2016-10-28 08:58:34

标签: php yield

让我们假设我有以下代码:

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 来调用者而不会打破当前的流量或一些奇怪的黑客代码?

0 个答案:

没有答案