редактирование многомерного массива с помощью [index] es, а не только [name] s - PullRequest
0 голосов
/ 14 мая 2009
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()?

Есть [index] es, а не только [name]!

Вы знаете, что я имею в виду?

массив (массив (дважды!

Ответы [ 3 ]

1 голос
/ 14 мая 2009

Если вы получите ключ массива в цикле 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;
}
0 голосов
/ 14 мая 2009

Попробуйте это.

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 копирует каждый элемент вместо возврата ссылки.

0 голосов
/ 14 мая 2009

unset ($ form ['params'])? Что вы подразумеваете под удалением?

...