由于警告问题,Array_map vs array_walk

时间:2013-08-27 09:54:08

标签: php

嗨我有一个简单的问题 我正在使用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 个答案:

答案 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会更有效。

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

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

答案 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 TextUTF-8 all the way through