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 に答える