2013-03-18 6 views
6

Questo mi ha fatto impazzire per tutta la sera. Fondamentalmente, ho bisogno di impostare un valore specifico in un array multidimensionale dopo aver disinfettato il valore e poi di nuovo (forse, dipende dalla convalida, se la validazione fallisce allora il valore deve essere impostato su una stringa vuota) dopo aver convalidato il valore. Diciamo che ho questo array messaggio:Come impostare dinamicamente valore nell'array multidimensionale per riferimento

$data['should']['be']['int'] = ' yjd'; 

Dopo la sanificazione il valore con filter_var($value, FILTER_SANITIZE_NUMBER_INT); sto ricevendo una stringa vuota indietro. Dovrei quindi in qualche modo impostare il valore su $data['should']['be']['int'] come stringa vuota.

Questo valore viene quindi passato a una funzione di convalida, che non riesce, perché la stringa vuota non è un numero intero. Ancora una volta, quel valore convalidato dovrebbe quindi essere impostato su $data['should']['be']['int'] su una stringa vuota.

Prima la cosa intera convalida prende il via mi risparmio tutti i tasti corrispondenti in una matrice, quindi per il momento ho bisogno di disinfettare o convalidare Ho qualcosa di simile a disposizione:

$keys = array(
    0 => 'should', 
    1 => 'be', 
    2 => 'int' 
); 

I' Ho provato ad accedere all'array $data usando le chiavi precedenti in un ciclo foreach facendo riferimento all'array &$data per impostare il nuovo valore, ma non sono stato in grado di farlo, indipendentemente da ciò che ho provato. Quanto sopra è solo un esempio semplificato. Il tutto fa parte di una classe di validazione, quindi non conosco la profondità esatta dell'array $data passato.

Qualsiasi suggerimento sarebbe molto apprezzato! Grazie per l'aiuto!

Modifica: Pensavo che non potessi modificare il post, ma alla fine è stata solo la mia connessione Internet. Si prega di ignorare il mio commento qui sotto. In ogni modo, qui è un metodo che ho provato a chiamare in modo ricorsivo:

protected function set_value(&$data, $value) { 
    foreach($data as &$val) { 
     if(is_array($val)) { 
      $this->set_value($val, $value); 
     } else { 
      $val = $value; 
     } 
    } 
} 

Per avviare il ciclo off ho fatto questo:

$this->set_value($data[$keys[0]], $value); 
+1

Mostra altro codice che avete provato. – mkaatman

+0

Commento rimosso, vedere modifica sopra. – shabushabu

risposta

11

si può provare

$data = array(); 
$keys = array(
     0 => 'should', 
     1 => 'be', 
     2 => 'int' 
); 

$value = 'yjd'; 



echo "<pre>"; 
setValue($data,$keys,$value); 
print_r($data); 

uscita

Array 
(
    [should] => Array 
     (
      [be] => Array 
       (
        [int] => yjd 
       ) 

     ) 

) 

Funzione utilizzata

function setValue(&$data, $path, $value) { 
    $temp = &$data; 
    foreach ($path as $key) { 
     $temp = &$temp[$key]; 
    } 
    $temp = $value; 
    return $value ; 
} 
+1

Grazie, funziona come un fascino. Ora che vedo la funzione ha senso. – shabushabu

+0

fantastico, tks molto! – fcaserio

+0

Universale per numerici e associativi, ottimo lavoro! – Zydnar