0
public $form = array (  
    array(  
        'field' => 'email',  
        'params' => array(  
            array(  
                'rule' => 'email',  
                'on' => 'create',  
                'required' => true,  
                'error' => 'The email is invalid!'  
            ),  
            array(  
                'rule' => 'email',  
                'on' => 'update',  
                'required' => false,  
                'error' => 'The email is invalid!'  
            )  
        )  
    )  
);


public function onlyNeeded($action) {
    $form = $this->form;
    $action = $this->action;

    foreach ($form as $formelement) {
        $field = $formelement['field'];
        $paramsgroup = $formelement['params'];
        if ($paramsgroup['on'] != $action) {
            form = removeparamsgroup($form, $action);
            }
        }
    return $form;
}

機能を実行するにはどうすればよいremoveparamsgroup()ですか?

[名前]だけでなく、[インデックス]もあります!

分かりますか?

array(array(2回!

4

3 に答える 3

1

foreachループで配列キーを取得した場合は、それを使用して正しい配列インデックスの設定を解除できます。また、例では実行していなかった、各フォーム要素の各パラメーターをループする必要があります。

public function onlyNeeded($action) {
    $form = $this->form;

    //get $formelement by reference so it can be modified
    foreach ($form as & $formelement) {

        //$key becomes the index of current $param in $formelement['params']
        foreach ($formelement['params'] as $key => $param) {
           if ($param['on'] != $action) {
               unset($formelement['params'][$key]);
           }
        }
    }
    return $form;
}
于 2009-05-14T14:56:21.180 に答える
0

unset($ form ['params'])?削除とはどういう意味ですか?

于 2009-05-14T14:36:40.087 に答える
0

これを試して。

function onlyNeeded($action) {
    $form = $this->form;

    foreach ($form as &$formelement) {
        foreach ($formelement['params'] as $key => $paramsgroup)
        {
            if ($paramsgroup['on'] != $action)
                unset($formelement['params'][$key]);
        }
    }
    return $form;
}

最初のforeachループの&サインインを忘れないでください。そうしないと機能しません。&記号がないと、foreachは参照を返す代わりに、各要素をコピーします。

于 2009-05-14T15:01:11.497 に答える