我不知道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;
?>
如果我使用或不使用它似乎不会改变输出。
答案 0 :(得分:4)
它的目的是 应该 将intval
的每个项目转换为整数。
但它没有那样做!
请注意,将array_walk与<?php
array_walk($arr, 'intval'); // does nothing in PHP 5.3.3
?>
一起使用是不合适的。
互联网上有很多例子建议使用以下代码来安全地转义整数数组:
intval()
它适用于部分旧版PHP(5.2),但它违反了规范。由于<?php
$arr = array_map('intval', $arr);
?>
不修改其参数,但返回修改后的结果,因此上面的代码对数组没有影响。
您可以使用以下代码:
array_walk
或者如果您坚持使用<?php
array_walk($arr, function(&$e) { // note the reference (&)
$e = intval($e);
});
?>
:
{{1}}
答案 1 :(得分:0)
PHP's array_walk函数调用数组上每个对象的指定函数,因此在array_walk($arr, 'intval');
的情况下,您将数组中的每个值转换为整数,因为它是{ {3}}功能确实。