2011-09-20 13 views
6

¿Cómo se pueden modificar las claves y los valores con array_walk_recursive?array_walk_recursive - modificar las claves y los valores

Aquí solamente los valores se codifican

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

Respuesta

5

array_walk_recursive sí se aplica únicamente la función de usuario en los valores de una matriz, no en índices (creo que tiene algo que ver con el hecho de que los índices de una array tiene que ser único, por lo que no puede manipularlos). Lo mejor sería escribir una función recursiva en ti mismo. El siguiente debería funcionar:

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

Otra función recursiva, además de la respuesta de 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; 
    } 
Cuestiones relacionadas