1

我不想让一个回调遍历整个数组(如array_map),而是想知道是否有一个函数可以让一个回调数组过滤一个值。

$value = 'foo';

$closures = array(
    function($value) { return $value . 'bar'; }
    function($value) { return $value . 'baz'; }
);

// Something other than a foreach with call_user_func?
// $value = array_callbacks($closures, $value);

// vs
foreach ($closures as $callback)
{
    $value = call_user_func($callback, $value);
}

print $value; // foobarbaz
4

2 回答 2

2

我认为你现在的做法是正确的。据我所知,没有“反向数组映射”。

您可以围绕依次调用每个回调的回调创建一个“包装器”函数,并使用 array_map 应用它,但我认为您不会从 foreach 方法中获得任何真正的好处。

于 2012-04-06T20:17:38.773 回答
2

您所描述的在函数式编程中称为“减少”或“折叠”,而不是“映射”,因为您试图按顺序通过值列表处理值,而不是收集应用每个结果的列表元素的原始值。

以下作品:

<?
$value = 'foo';

$closures = array(
    function($value) { return $value . 'bar'; },
    function($value) { return $value . 'baz'; }
);


print array_reduce($closures,
                   function ($value, $callback) { return $callback($value); },
                   $value);
?>

但我同意其他海报的使用可能更简单foreach。尝试在 PHP 中做函数式的东西是很痛苦的。

于 2012-04-06T20:40:24.053 回答