我不想在整个数组上进行单个回调遍历(比如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
答案 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做一些功能是很痛苦的。