1

次のPOST配列があります。

[projects] => Array (
        [0] => Array
            (
                [description] => description 1
                [path] => url 1
            )

        [1] => Array
            (
                [description] => description2
                [path] => url 2
            )

        [2] => Array
            (
                [description] => description 3
                [path] => url 3
            )

    )

filter_var_array($_POST, $this -> fields);そして、私はそれをwherefields=でフィルタリングしたいと思いますarray('projects' => array('filter' => FILTER_CALLBACK,'flags' => FILTER_FORCE_ARRAY, 'options' => array($this, 'cleanProjects'));

ただし、cleanProjects関数に渡される値は、説明とパスを含む配列ではありませんが、すべての値を1つずつ渡します(したがって、メソッドは6回呼び出され、説明1の場合は1、URL 1の場合は1、 description2など)

フィルタ関数でオブジェクト全体をコールバック関数に渡すにはどうすればよいですか?したがって、プロジェクト内のすべてのオブジェクト/配列に対してcleanProjectsを呼び出します(この例では3回)。

4

1 に答える 1

0

現在使用しているのは、配列変数による間接メソッド呼び出しと呼ばれ、PHP 5.4 above

解決策 1 : PHP のバージョンをアップグレードすると、コードを変更しなくても動作するようになります

        'options' => array($this, 'cleanProjects')));  
                         |_______________________|
                                      +------------ Indirect Method call by array

解決策 2 :クロージャを使用するだけ

    $self = $this ;
    $options = function($args) use ($self)
    {
        $self->cleanProjects($args);
    };

    $this->fields = array('projects' => array(
            'filter' => FILTER_CALLBACK,
            'flags' => FILTER_FORCE_ARRAY, 
            'options' => $options));   // add the closure 
    $var = filter_var_array($_POST, $this -> fields);
于 2012-12-17T12:10:05.640 に答える