2011-09-20 4 views
6

Come è possibile modificare sia chiavi che valori con array_walk_recursive ??array_walk_recursive - modifica di entrambe le chiavi e valori

Qui solo i valori sono codificati

function _utf8_encode($arr){ 
    array_walk_recursive($arr, 'utf8_enc'); 

    return $arr; 
} 

function utf8_enc(&$value, &$key){ 
    $value = utf8_encode($value); 
    $key = utf8_encode($key); 
} 

risposta

5

array_walk_recursive non si applicano solo la funzione utente sui valori di un array, non su indici (penso che abbia qualcosa a che con il fatto, che gli indici di un array deve essere unico, quindi non è possibile manipolarli). La cosa migliore sarebbe scrivere su se stessi una funzione ricorsiva. Il seguente dovrebbe funzionare:

function utf8enc($array) { 
    if (!is_array($array)) return; 
    $helper = array(); 
    foreach ($array as $key => $value) $helper[utf8_encode($key)] = is_array($value) ? utf8enc($value) : utf8_encode($value); 
    return $helper; 
} 

$enc_array = utf8enc($your_array); 
0

Un'altra funzione ricorsiva in aggiunta alla risposta di rabudde:

function utf8_encode_array($array_to_encode=array()){ 

     $encoded_array=array(); 

     if(is_array($array_to_encode)){ 

      foreach($array_to_encode as $key => $value){ 

       $key=utf8_encode($key); 

       if(is_array($value)){ 

        $encoded_array[$key]=utf8_encode_array($value); 

       } 
       else{ 

        $encoded_array[$key]=utf8_encode($value); 

       } 
      } 
     } 

     return $encoded_array; 
    } 
Problemi correlati