array_walk() 是做什么的?

What does array_walk() do?

我不明白 array_walk($arr, 'intval'); 做了什么,我在下面的代码片段中注释掉了:

<?php    
$handle = fopen ("php://stdin","r");
fscanf($handle,"%d",$n);
$arr_temp = fgets($handle);
$arr = explode(" ",$arr_temp);
//array_walk($arr,'intval');
$sum=0;
foreach($arr as $i)
{
    $sum = $sum + $i;
}
echo $sum;
?>

无论我使用与否似乎都不会改变输出。

PHP's array_walk function calls the specified function on every object on an array, so in the case array_walk($arr, 'intval'); you are converting every value in the array to an integer, because that's what the intval 功能正常。

它的目的是应该$arr的每一项转换为整数。

但它并没有这样做!

请注意,将 array_walk 与 intval 一起使用是不合适的。

互联网上有很多示例建议使用以下代码安全地转义整数数组:

<?php
array_walk($arr, 'intval'); // does nothing in PHP 5.3.3
?>

它适用于 一些 较旧的 PHP 版本 (5.2),但它违反规范。由于 intval() 没有修改它的参数,但是 returns 修改了结果,上面的代码对数组没有影响。

您可以改用以下内容:

<?php
$arr = array_map('intval', $arr);
?>

或者如果你坚持使用array_walk:

<?php
array_walk($arr, function(&$e) { // note the reference (&)
   $e = intval($e);
});
?>