2011-09-20 24 views
6

Làm cách nào để bạn có thể sửa đổi cả khóa và giá trị bằng array_walk_recursive ??array_walk_recursive - sửa đổi cả khóa và giá trị

Đây chỉ các giá trị được mã hóa

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

Trả lời

5

array_walk_recursive không chỉ áp dụng các chức năng sử dụng trên các giá trị của một mảng, không phải trên các chỉ số (tôi nghĩ nó có cái gì đó để có một thực tế, rằng các chỉ số của một mảng phải là duy nhất, vì vậy bạn không thể thao tác chúng). Điều tốt nhất là viết một hàm đệ quy lên chính bạn. Sau đây nên làm việc:

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

Một hàm đệ quy, thêm vào câu trả lời của 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; 
    } 
Các vấn đề liên quan