2

PHP の匿名関数とクロージャーに慣れてきました。クロージャーまたは anon 関数を使用して array_walk に渡す必要がありますが、追加のパラメーターを使用すると、単純なコード ブロックになります。

        $array = array(1, 2, 3, 4, 5, array(1, 2));

        $callback = function(&$value, $key)
        {
            $value = $key*$value;
        };

        var_dump($array, array_walk_recursive($array, $callback), $array);

そのままでは非常に単純ですが、次のように機能を変更したいとします。

        $callback = function(&$value, $key, $multiplier)
        {
            $value = $key*$value*$multiplier;
        };

乗数をanon関数に渡すにはどうすればよいですか? または、それが閉鎖でなければならない場合、どうすればそれを行うことができますか。

次のようにエラーが発生するためです。

array_walk_recursive($array, $callback(5))

array_walk には、渡すことができる追加のパラメーター $user_data があることは知っていますが、クロージャーまたはアノン関数でそれが必要です。

4

2 に答える 2

3

これには PHP のクロージャを使用できます。

<?php
$array = array(1, 2, 3, 4, 5, array(1, 2));
$multiplier = 5;

$callback = function(&$value, $key) use ($multiplier) {
    $value = $key*$value*$multiplier;
};

var_dump($array, array_walk_recursive($array, $callback), $array);

明らかに$multiplier、クエリ引数や計算結果などの非静的値を受け取ることができます。数値を保証するために、必ず検証と型キャストを行ってください。

于 2015-09-06T08:17:22.833 に答える