Выход внутри ламбы, используемой функциями array_ *

Предположим, у меня есть следующий код:

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 звонящему без прерывания текущего потока или какого-то странного хакерского кода?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]