2

我不明白做什么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;
?>

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

4

2 回答 2

8

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

但它不会那样做!

请注意,使用 array_walkintval是不合适的。

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

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

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

您可以改用以下内容:

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

或者,如果您坚持使用array_walk

<?php
array_walk($arr, function(&$e) { // note the reference (&)
   $e = intval($e);
});
?>
于 2016-10-09T16:50:42.290 回答
0

PHP 的 array_walk函数对数组中的每个对象调用指定的函数,因此在将array_walk($arr, 'intval');数组中的每个值转换为整数的情况下,因为这就是intval函数的作用。

于 2016-10-09T16:39:52.387 回答