最新消息: 新版网站上线了!!!

Php 多维数组中的数据编码格式转换

Php中对一个字符串进行编码格式转换很简单直接使用iconv()函数就可以 比如:iconv(utf-8,gbk,我的祖国)把字符串我的祖国的编码格式由utf-8转换成gbk格式,可是如果要对一个数组中的值进行转换如何操作?尤其是多维数组。在php的函数库中没有直接对数组内容进行编码转换的函数,只能自己定义。

对多维数组进行编码转换,在操作中要使用到递归

实例:

下面定义的数组中键和值中都有汉字,是为了在测试中让自定义的转码函数m_iconv更加健全

        $dd = array(
            0,
            1,
            "d" => "e问问",
            "q"=>"444",
            "f刚刚"=>array(
                3,
                4,
                "t" => "5方法",
                "我"=> "6搜索"
            )
        );
        $d = m_iconv('utf-8','gbk',$dd);
        print_r($d);

自己定义数组内容转码函数

/**
* php转码函数
* $in_charset 此刻编码
* $out_charset 转码后,输出的编码
* $datas 要转码的数据
*/
function m_iconv($in_charset,$out_charset,$datas){
    if(is_array($datas)){                            //如果数据为数组
        foreach($datas as $k=>$v){
            if(is_array($v)){                        //如果数据为多维数组,进行下面的递归调用m_iconv()函数自身
                $k = iconv($in_charset,$out_charset,$k);            //多维数组的键进行转码,这里可以把键设置为汉字测试看看
                $ml[$k] = m_iconv($in_charset,$out_charset,$v); 
            }elseif(is_string($k) || is_string($v)){        //如果是一维数组判断键和值是否为字符串
                if(is_string($k)){
                    $k = iconv($in_charset,$out_charset,$k);
                }
                if(is_string($v)){
                    $v = iconv($in_charset,$out_charset,$v);
                }
                $ml[$k] = $v; 
            }else{
                $ml[$k] = $v;                    //一维数组键和值都为数组
            }
        }
    }elseif(is_string($datas)){                        //如果数据为字符串
        $ml = iconv($in_charset,$out_charset,$datas);
    }else{
        $ml = $datas;                                //如果数据为数值
    }
    return $ml;
}




转载请注明:谷谷点程序 » Php 多维数组中的数据编码格式转换