2011-09-20 68 views
6

如何修改array_walk_recursive這兩個鍵和值?array_walk_recursive - 修改鍵和值

這裏只值進行編碼

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

回答

5

array_walk_recursive確實只適用於一個數組的值用戶的功能,而不是指數(我認爲它有話與事實,即一個索引數組必須是唯一的,所以你不能操縱它們)。最好的事情是爲自己寫一個遞歸函數。下面應該工作:

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

除了另一個遞歸函數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; 
    }