0

嗨,我有一个简单的问题,我正在使用 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);) 具有相同的效果,因为使用数组映射我没有警告问题。

谢谢。

4

4 回答 4

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);
于 2013-08-27T10:03:29.653 回答
1

当然,array_map 更适合您。因为您只想对行的值进行编码。array_walk要求回调函数接受 2 个参数:值和键。

由于您不打算对密钥进行编码,因此使用 array_map 会更有效。

http://php.net/manual/en/function.array-walk.php

http://www.php.net/manual/en/function.array-map.php

于 2013-08-27T10:04:50.280 回答
0

utf8_encode有一个参数,修复:

array_walk($row, function (&$value,$key) {
    return utf8_encode($value);
}); 
于 2013-08-27T10:02:22.150 回答
0

array_walk将两个参数传递给回调:值和键。utf8_encode期望一个参数,因此抱怨。array_map在这里会更好,因为它不会将其他参数传递给回调:

$row = array_map('utf8_encode', $row);

话虽如此,在 99% 的情况下utf8_encode使用是错误的。阅读每个程序员绝对、肯定需要了解的有关编码和字符集的知识,以使用文本UTF-8 一直到.

于 2013-08-27T10:03:54.703 回答