2011-09-20 15 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; 
    } 
संबंधित मुद्दे