array_walk()做什么?

时间:2016-10-09 16:34:56

标签: php arrays array-walk

我不知道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;
?>

如果我使用或不使用它似乎不会改变输出。

2 个答案:

答案 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}}功能确实。