将值映射到回调数组(与array_map相反)

时间:2012-04-06 19:32:06

标签: php arrays closures

我不想在整个数组上进行单个回调遍历(比如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

2 个答案:

答案 0 :(得分:2)

我认为你现在这样做的方式是正确的。据我所知,没有“反向阵列图”。

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

答案 1 :(得分:2)

您所描述的内容在函数式编程中称为“reduce”或“fold”,而不是“map”,因为您尝试按顺序处理值列表中的值,而不是收集结果列表将每个元素应用于原始值。

以下作品:

<?
$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做一些功能是很痛苦的。

相关问题