嗨我有一个简单的问题 我正在使用array_walk将数组编码为utf8,如下所示:
array_walk($row, 'utf8_encode');
但我继续收到一个php警告
(PHP Warning: Wrong parameter count for utf8_encode() ).
所以我想知道使用array_map代替编码为utf8(array_walk('utf8_encode',$row);
)具有相同的效果,因为使用数组映射我没有警告问题。
感谢。
答案 0 :(得分:1)
那是因为,utf8_encode只需要1个参数,但array_walk()给出2.你可以这样做:
function encode_items(&$item, $key) {
$item = utf8_encode($item);
}
array_walk($row, 'encode_items');
或抑制警告(不好)
@array_walk($row, 'utf8_encode');
或更好地使用array_map():
function utf8_encode_array($array) {
return array_map('utf8_encode', $array);
}
$encoded = array_map('utf8_encode_array', $row);
答案 1 :(得分:1)
当然,array_map对你更好。因为您只想编码行的值。 array_walk
要求回调函数接受2个参数:value和key。
由于您不打算对密钥进行编码,因此使用array_map会更有效。
答案 2 :(得分:0)
utf8_encode只有一个参数,修复:
array_walk($row, function (&$value,$key) {
return utf8_encode($value);
});
答案 3 :(得分:0)
array_walk
将两个参数传递给回调:值和键。 utf8_encode
期望一个参数,因此会抱怨。 array_map
在这里可以更好地工作,因为它没有将其他参数传递给回调:
$row = array_map('utf8_encode', $row);
话虽如此,99%的案例utf8_encode
使用是错误的。阅读What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text和UTF-8 all the way through。