2009-05-14 6 views
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; 
} 

Wie mache ich die removeparamsgroup() Funktion?Editieren eines mehrdimensionalen Arrays mit [index] es, nicht nur [name] s

Es gibt [index] es, nicht nur [name] s!

Wissen Sie, was ich meine?

Array (array (zweimal!

+0

Können Sie mehr erklären? Ich verstehe nicht. –

+0

Ich muss die $ paramsgroup aus der $ -Form löschen, wenn $ action = $ paramsgroup ['on'], aber nicht gesetzt funktioniert nicht. –

+0

Unset funktioniert nicht wie? – Simurr

Antwort

1

Wenn Sie die Array-Schlüssel in der foreach-Schleife zu erhalten, können Sie unset der richtige Array-Index, dass die Verwendung verwenden. Sie müssen auch über jeden param jeden Formularelement-Schleife, die Sie nicht in Ihrem Beispiel zu tun wurden.

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; 
} 
+0

netter Job, du hast mich auch geschlagen;) – gradbot

0

unset ($ form [ 'params'])? Was meinen Sie entfernen?

+0

Ya ich bin auch verloren. Ich verstehe die Frage nicht. – gradbot

+0

wenn die 'aktion' = erstellen, param arrays mit 'on' = 'update' sollten aus dem Formularfeld array gelöscht werden ( 'rule' => 'email', 'on' => 'update', 'Erforderlich' => Falsch, 'Fehler' => 'Die E-Mail ist ungültig!' ) –

+0

Ich habe gerade versucht, $ form = unset ($ paramsgroup), aber dann meine IDE highlited als Fehler aufgehoben! –

0

bereits.

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; 
} 

Vergessen Sie nicht das Zeichen & in der ersten foreach-Schleife oder es wird nicht funktionieren. Ohne das Zeichen & kopiert foreach jedes Element, anstatt eine Referenz zurückzugeben.