[index] es, sadece [name] s ile çok boyutlu bir dizi düzenleme

3 Cevap php
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;
}

Ben removeparamsgroup() function nasıl yapabilirim?

[Isim] s sadece [index] es vardır!

Ne demek istediğimi biliyor musun?

array (array (iki kez!

3 Cevap

Eğer foreach döngüsü dizi anahtarı alırsanız, bunu kullanarak kullanarak doğru dizi indeksi unset olabilir. Ayrıca size örnekte yaptıklarını değil, her form öğesi, her param üzerinde döngü gerekir.

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

unset ($ form ['params'])? Remove ile ne demek istiyorsunuz?

Bu deneyin.

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

Ve unutma ilk foreach döngüsünde oturum ya da işe yaramaz. & Olmadan foreach kopyalar yerine bir başvuru dönen her elemanını imzalamak.