array_combine()函数会得到一个新数组,它由一组提交的键和对应的值组成。其形式为:
array array_combine(array keys,array values)
注意,两个输入数组必须大小相同,不能为空。
例子:
<?php //php数组连接 //by www. $name = array("apple", "banana", "orange"); $color = array("red", "yellow", "orange"); $fruit = array_combine($name, $color); print_r($fruit); // output // Array ( [apple] => red [banana] => yellow [orange] => orange ) ?>
以下函数实现:
自动生成select的option项。
代码如下:
<?php /** * 自动生成form中的select表单 * edit by www. */ function get_select_html($msg_list,$msg_val=""){ $arr_list=$msg_list; if(!is_array($arr_list)) return ""; $str_return=""; if(is_assoc($arr_list)){ foreach($arr_list as $key=>$item){ $str_sel=""; if($key==$msg_val) $str_sel=" selected"; $str_return.="<option value="".$key."" ".$str_sel."="">".$item."</option>"; } }else{ foreach($arr_list as $item){ $str_sel=""; if($item==$msg_val) $str_sel=" selected"; $str_return.="<option value="".$item."" ".$str_sel."="">".$item."</option>"; } } return $str_return; } ?>
代码说明:
返回一个select的option项目,$msg_list是一个array($key=>$value),$msg_val是需要默认选中的值。
可以把函数写成一个php静态类中的静态方法,用起来更方便。
在php编程中,对数组的操作,有时会遇上编码转换的相关问题。
因为一些特殊字符的显示效果的原因,于是把utf-8改成了GBK,由于使用了ajax技术,又涉及到了老问题——编码转换。
一些表单验证需要返回json数据,php的json_encode函数只支持utf-8编码,无奈只得iconv了,需要达到的效果是GBK数组转换成utf-8数组传给json_encode函数。
最初是这样操作的,将数组序列化后用iconv函数转换编码,之后再反序列化:
unserialize(iconv('gbk','utf-8',serialize($array)));
得到的结果是空白,后来想起来配置文件里设置了默认编码 ini_set('default_charset', 'gbk');
这样用gbk反序列化utf-8的字符串肯定不好用了,此处在序列化和反序列化之间加个ini_set('default_charset', 'utf-8'); 应该也是可以的。
不过由于是全局的编码设置,很容易导致其他地方的编码问题,比如数据库操作。
用构建数组原型的序列化方法,借助var_export函数,最终函数如下:
<?php function array_iconv($in_charset,$out_charset,$arr){ return eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';')); } ?>
原理分析:
var_export设置第二个参数为true,返回数组原型字符串,将字符串转换为utf-8编码,之后再用eval来执行返回(类似匿名函数?),至此完美解决问题。
总结:
网上的方法,大多都是利用递归调用iconv的方式,如果数组元素过多或者维数多一些,性能不行。
因此,最好的方式,个人感觉还是用原生代码,不需要考虑是N维数组还是关联数组,一切自动完成,保证数组转换前后数据一致。
关于php数组中编码转换的这个问题,就介绍到这里了,希望对大家有所帮助。