https://www.cnblogs.com/phpfensi/p/7861218.html
在PHP中,
array_walk()
和array_map()
两个函数都可以实现对数组中每个值的修改,比如本例就是将数组中所有的值,由UTF-8编码转成GBK编码。当然,除了这两个函数,也可以用
foreach
遍历数组实现,不过,相比于直接用 PHP 的内部函数,显然效率更低并且不够优雅。
array_wark()
实现方式如下:function array2gbk($array) { array_walk($array, function(&$value) { $value = iconv('utf-8', 'gbk', $value); }); return $array; }
array_map()
实现方式如下:function array2gbk($array) { $array = array_map(function($value){ return iconv('utf-8', 'gbk', $value); }, $array); return $array; }
由此也可以看出这两个函数的共性和区别:
- 传入这两个函数的 $value,就是数组中的单一个元素。
array_walk()
仅返回true
或者false
,array_map()
返回处理后的数组;- 要得到处理后的元素值,
array_walk()
需要在传入参数值加&
引用符号,array_map()
则需要return
返回。这两种方式都可以实现同样的功能,选择其一即可。
同理也可用于其他编码的互转。
查找资料过程中发现有使用eval()方法转换(PHP数组编码gbk与utf8互相转换的两种方法),但在PHP开发手册中有如下警示:
Caution
函数eval()语言结构是 非常危险的, 因为它允许执行任意 PHP 代码。 它这样用是很危险的。 如果您仔细的确认过,除了使用此结构以外 别无方法, 请多加注意,不要允许传入任何由用户 提供的、未经完整验证过的数据 。
故不使用该方法。